Samo treba da čitaš kod, ništa više... Znam da ti to spremaš za ispit, al' nemoj napamet da učiš taj postupak.
Ova linija koda, startuje celu priču:
Code:
int i = a.m(6);
Poziva se metod m(), i kao argument mu se prosleđuje 6. I sad čitaj kod tog metoda... Prvo ide if koji pita da li je
i, odnosno, taj prosleđen parametar manji ili jednak 1. Mi smo prosledili
6, tako da taj uslov neće biti ispunjen, pa se neće ni ući u taj if, već se ide na tu sledeću liniju koda. E sad idemo na return... U njemu idu dva rekurzivna poziva ovoj istoj f-ji. Prvi će pozvati f-ju sa prosleđenim argumentom
4 (to je ovo i-2), a drugi sa argumetom
3 (i-3). I sad, za taj prvi poziv- m(4), opet se ulazi u metod m(), i opet ide ista priča: da li je i <= 1, nije, ide se na ovaj donji return, i opet idu dva rekurzivna poziva, sa argumentima 2 i 1 (pošto smo u ovom pozivu prosledili 4 kao argument), itd., itd.
Možda je najbolje da opet slikovito objasnim ceo postupak:
m(6) =
m(4) +
2*m(3) + 1 =
m(2) + 2*m(1) +
2*(m(1) + 2*(m(0)) + 1 =
m(0) + 2*m(-1) + 2*2 +
2*(2 + 2*2) + 1 =
2 + 2*2 + 4 + 2*6 + 1 =
2 + 4 + 4 + 12 + 1 =
23
E aj' sad ti tako probaj da ispišeš taj drugi primer iz tvog post-a.