rekurencja
Booxon: Potrzebna pomoc z algorytmem :C
Dana jest następująca funkcja rekurencyjna:
Dane:
x — liczba całkowita,
n — dodatnia liczba całkowita.
funkcja F(x, n)
jeżeli n = 1
podaj wynik x i zakończ
w przeciwnym razie
jeżeli n mod 3 = 0
k ← F(x, n div 3)
podaj wynik k*k*k i zakończ
w przeciwnym razie
podaj wynik x*F(x, n−1) i zakończ
Uwaga: „div” jest operatorem dzielenia całkowitego.
Podaj wszystkie wywołania rekurencyjne funkcji F oraz obliczany po każdym wywołaniu
wynik, jeśli na początku wywołamy F(2, 10), potrzebne kolejne 5 wywołań
14 gru 16:05
xyz:
F(2,10)
czy n = 1 ? − Nie,
czy n mod 3 = 0 ? − Nie
zatem wynik to 2 * F(2,9)
<koniec pierwszego wywolania>
<rozpoczynam drugie wywolanie> F(2,9)
czy n=1? − Nie (bo n=9)
czy n mod 3 = 0? − Tak
zatem k = F(2, 3) −−>rozpoczecie kolejnego wywolania
zapamietujemy: wynik to k*k*k
dla wywolania F(2,3)
czy n =1 ? − Nie
czy n mod 3 = 0? − Tak
zatem k = F(2,1) −> rozpoczecie kolejnego wywolania
zapamietujemy wynik k*k*k
dla wywolania F(2,1):
czy n = 1? − Tak
zatem podajemy x jako wynik czyli 2.
Wracamy do wywolania F(2,3)
wynikiem jest k*k*k (u nas k=2) zatem 2*2*2 = 8
Wracamy do wywolania F(2,9)
wynikiem jest k*k*k u nas k = 8, wiec 8*8*8 = 512
Wracamy do wywolania F(2,10)
wynikiem bylo 2 * F(2,9) zatem 2 * 512 = 1024
to tyle
Czy cos pominalem?
14 gru 16:39
Booxon: Raczej jest dobrze, bo sam przeanalizowałem kilka razy i wyszły te same wyniki czyli: 2, 8,
512, 1024. Dziękuję za pomoc
14 gru 16:52