Što je repna rekurzija?

Repna rekurzija je vrsta poziva metode programiranja gdje metoda poziva samu sebe, a zatim odmah vraća vrijednost tog drugog poziva. Drugim riječima, repna rekurzija se događa kada je konačni izraz unutar metode drugi poziv toj istoj metodi. Parametri u drugom pozivu metode općenito se razlikuju od onih u prvom, ali to nije potrebno. Da bi ova rekurzija funkcionirala, metoda koja se poziva unutar sebe mora vratiti konkretnu vrijednost, kao što je broj, niz ili neki drugi objekt. Void metode, koje ne vraćaju vrijednost, ne rade dobro za rekurziju.

Zahtjev da rekurzivni poziv mora biti posljednja izjava u njegovoj metodi poziva ne znači nužno da je rekurzivni poziv posljednji redak u metodi. Ispravan poziv rep rekurzije također se može pronaći unutar kontrolne strukture, što znači da, u izvornom kodu, kontrolna struktura može završiti metodu, a ne poziv. Važna razlika u ovom slučaju je da kontrolna struktura nije programska izjava, već ugrađeni dio računalnog jezika.

Rekurzija repa postoji u mnogim računalnim jezicima, uključujući Javu i C++. Često se ovi rekurzivni pozivi mogu prepisati korištenjem drugih sredstava, kao što su for petlje, while petlje ili naredbe goto. Korisnost rekurzije nalazi se kada se kreira mnogo uzastopnih poziva iste metode. Rekurzija je često najčišći i najlakši način za izvršavanje zadataka koji se ponavljaju.

Uobičajeni primjer repne rekurzije je metoda koja izračunava faktorijel broja. Ovaj proces je idealan jer se, počevši od bilo kojeg broja, svaki broj prije nego što se množi zajedno. Dakle, da biste pronašli faktorijel od 5, ispravan postupak za to bi bio množenje 5*4*3*2*1. Rekurzija dolazi zbog načina na koji je faktorijalna metoda strukturirana: ako je faktorijal 1, vratite 1, inače vratite faktorijel broja danog metodi minus jedan. Ova metoda je također korisna jer se može ekvivalentno napisati korištenjem bilo koje vrste repne rekurzije, sa ili bez kontrolne izjave oko konačnog poziva metode.

Repna rekurzija je samo jedan primjer više vrsta rekurzije. Koncept u svim vrstama rekurzije je u biti isti, da na neki način metoda poziva samu sebe. Od ovih tipova, razlika repne rekurzije je u tome što se vrijednost rekurzivnog poziva odmah vraća i ništa se drugo ne događa u metodi pozivanja nakon tog poziva.