Uvod

Sada se pripremite za nešto od čega će vas zaboljeti glava.

Nemojte se brinuti ako ne "skopčate" odmah ovaj koncept, čak ni neki dugogodišnji programeri "nisu načisto" sa rekurzijom. :)

Funkcije mogu pozivati funkcije! Da.. to smo već vidjeli, "main" je pozvao funkciju "kvadrat".
Ali šta ako funkcija pozove samu sebe!??
Da, i to je moguće, i vrlo korisno u nekim slučajevima.


Napisaćemo rekurzivnu funkciju koja odbrojava od x do 1:

  • dodajte novu funkciju countdown
  • dodajte joj parametar Integer x
  • dodajte If sa uslovom x > 0
  • ispišite x u true grani
  • pozovite countdown(x-1) nakon ispisa
  • pozovite countdown(5) u main funkciji

Pokrenite program, ispisaće 5, 4, 3, 2, 1.
Kako ova magija radi??

Kada je countdown pozvana sa argumentom 5, ispisaće ga i pozvati countdown(4).
Zatim će ispisati 4 i pozvati countdown(3).
Zatim će ispisati 3 i pozvati countdown(2).
Zatim će ispisati 2 i pozvati countdown(1).
Zatim će ispisati 1 i pozvati countdown(0).
U ovom trenutku uslov će biti false tako da će se funkcija završiti.

Tek kada se ovaj poziv funkcije završi, kreće se sa "odmotavanjem":

  • završiće se poziv countdown(1)
  • završiće se poziv countdown(2)
  • završiće se poziv countdown(3)
  • završiće se poziv countdown(4)
  • završiće se poziv countdown(5)
  • završiće se main

Najbitniji dio je bazni/završni slučaj tj. uslov završetka rekurzije.
To je ova false grana, jer npr. kad ne bi imali ovaj If uslov, rekurzija se nikad ne bi završila.
U tom slučaju program bi se zaledio i morali bismo ga zaustaviti (klikom na Stop dugme).
Možete probati pozvati main u mainu, doći će do beskonačne rekurzije.

Settings