Edit: Tek sada sam skontao da se pitas zasto je
rezultat, a ne zasto ti vraca u najdubljoj rekurziji 9.
Svakako, ovaj moj primer ispod ce ti pomoci da razumes kako radi rekurzija.
Poenta je da kada dodje do bazicnog slucaja to nije kraj izvrsavanja, nego tada se stice uslov da se nastavi izvrsavanje prethodne rekuzije.
Kao da ides
niz stepenice gde svaka ima vrednost base i ima n stepenica.
Ako krenes od stepenika 6 on ti kaze:
Moja vrednost je 3 * vrednost svih preostalih stepenika.
Ti kazes ok, idem na sledeci stepenik da vidim njegovu vrednost.
Kada se spustis na sledeci on ti kaze isto i ti nastavis dalje.
Kada dodjes do zadnjeg stepenika n=1 on ti kaze:
Moja vrednost je 3 * prestali... cekaj, nema vise stepenika, moja vrednost je 3!
Zahvalis mu se i krenes da se vracas i stepeniku iznad kazes:
Hej, vrednost stepenika ispod je 3!
On ti odgovori:
E super, moja vrednost je 3 * 3 = 9
Vratis se opet jedan stepenik i kazes:
Hej, vrednost stepenika ispod je 9.
On ti odgovori:
E super, moja vrednost je 3 * 9 = 27
Itd..
Kada vise nema stepenika ti si zapravo
izasao iz rekurzije i ono sto si izmnozio do tada je rezultat.
---------------------------------------------
Ne vraca 9 nego 3. Mozda u debug modu lose tumacis vrednosti.
Probaj da razdvojis korake:
Code (java):
if (n
== 1) {
System.
out.
println(String.
format("(%s, %s): %s", base, n, base
));
return base
;
}
if (n
== 0)
return 1;
if (n
> 1) {
int recursionResult
= powerN
(base, n
- 1);
System.
out.
println(String.
format("(%s, %s): %s", base, n, base
* recursionResult
));
return base
* recursionResult
; //nadam se da niko nece cupati kosu jer opet mnozim :P
}
throw new IllegalArgumentException("Negative power not supported");
}
Ovo ce print samo vrednost rekurzivnih poziva, tj nece odstampati prvi poziv.
Primer:
Code:
powerN(3, 6);
-----------
(3, 1): 3
(3, 2): 9
(3, 3): 27
(3, 4): 81
(3, 5): 243
(3, 6): 729
Kao sto vidis rezultat najdublje rekuzije je 3, jedino sto mi pada na pamet je da si u debug modu gledao ceo izraz
base * powerN(base, n-1).
[Ovu poruku je menjao plague dana 12.11.2015. u 01:49 GMT+1]