• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zrozumienie rekurencji

Object Storage Arubacloud
0 głosów
328 wizyt
pytanie zadane 14 sierpnia 2020 w C i C++ przez Feszyn F Flora Początkujący (320 p.)

Witam , mam problem ze zrozumieniem rekurencji , w  algorytmie do potęgowania 

#include <stdio.h>
#include <stdlib.h>

int potega(int a, int n, int poziom);

int main ()
{
    int a = 5;
    int n = 4;

    printf("\n\n %d^%d = %d\n", a, n, potega(a, n, 1));

    return 0;
}

int potega(int a, int n, int poziom)
{
    int p;

    printf("%*c poziom %d: n = %d\n", poziom + 1, ' ', poziom, n);

    if (n == 0) {
        p = 1;
    } else {
        p = a * potega(4, n - 1, poziom + 1);
    }

    printf("%*c poziom %d: p = %d\n", poziom + 1, ' ', poziom, p);

    return p;
}

Wiem ,że to nie jest oryginalny algorytm ,ale dlaczego a * potęga(4, n-1) wypisuje potęge 4^2 = 16 i później 64 a na końcu wszystko mnoży przez 5 . jak dla mnie jest to kompletnie nie zrozumiałe zachowanie 

2 odpowiedzi

+1 głos
odpowiedź 14 sierpnia 2020 przez Wiciorny Ekspert (270,190 p.)
wybrane 14 sierpnia 2020 przez Feszyn F Flora
 
Najlepsza

mnoży przez 5, bo idziesz od początku :) czyli ostatnia operacja jest tą która idąc w kodzie linijka po linijce jest pierwsza.
Stąd jak na początku masz a * coś tam... to a =5 na początku stąd w wyniku na końcu mnożysz wszystko przez 5,  poprzednie wyniki sa wynikami REUKRENCYJNYCH FUNKCJI czyli tego 
 

potega(4, n - 1, poziom + 1);

 i z każdym wywołaniem tej funkcji idziesz jakby w głąb, a błąd polega na tym że posyłasz ciągle tę samą wartość ...  czyli 4. 

potega(4, n - 1, poziom + 1);

a powinieneś potega(a, n - 1, poziom + 1);

komentarz 14 sierpnia 2020 przez Feszyn F Flora Początkujący (320 p.)
Dzięki , opowiedziałeś na moje pytanie , nie chodziło mi  o to ,że  return potega jest zły ,bo wiem ,że jest zły ,ale raczej dlaczego  ostatni wynik jest mnożony przez 3 ,a nie przez 4 , już wiem ,bo ostatnią liczbą funkcji rekurencyjnej jest  zadeklarowane a ,czyli 3. Jest jeszcze jedna opcja, Napisanie  return 3 * potega(4, n - 1, poziom + 1); i tu wypisuje same potęgi 3 ,czyli 3 , 9 ,27  bo wykładnik to 3 ,ale dlaczego 4 nie ma znaczenia w tym przypadku , tzn ja moge zamiast 4 wpisać dowolną liczbę i ostatni wynik to 27 będzie cały czas
komentarz 14 sierpnia 2020 przez Wiciorny Ekspert (270,190 p.)
Jeśli wypisujeszcoś na końcu funkcji ... a masz rekurencje to zauważ że najbardziej  Z BRZEGU FUNKCJA, WYKONA SIĘ NA KOŃCU, bo do jej końca musi rekurencyjnie wywołać siebie- w śodku stąd "podająć jako pierwszy parametr liczbę 3 --- ona będzie na samym ko ncu" bo cześniej wykona się funkcja dla 2, 1, no i np. 0 bo działa rekurencja
komentarz 14 sierpnia 2020 przez Feszyn F Flora Początkujący (320 p.)
co z tą 4 się dzieje ?
0 głosów
odpowiedź 14 sierpnia 2020 przez Oscar Nałogowiec (29,320 p.)
Jest oczywisty błąd. Powinno być a * potęga (a, n-1, poziom+1). Może dlatego trudno zrozumieć.

Podobne pytania

0 głosów
1 odpowiedź 449 wizyt
0 głosów
1 odpowiedź 232 wizyt
pytanie zadane 4 stycznia 2018 w C i C++ przez Sic Dyskutant (8,510 p.)
0 głosów
3 odpowiedzi 2,953 wizyt

92,579 zapytań

141,431 odpowiedzi

319,657 komentarzy

61,963 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...