Kaj je repna rekurzija?

Rekurzija repa je vrsta klica programske metode, kjer metoda pokliče samo sebe, nato pa takoj vrne vrednost tega drugega klica. Z drugimi besedami, repna rekurzija se pojavi, ko je končni stavek znotraj metode še en klic iste metode. Parametri v drugem klicu metode se na splošno razlikujejo od parametrov prve, vendar to ni potrebno. Da bi ta rekurzija delovala, mora metoda, ki se kliče znotraj sebe, vrniti konkretno vrednost, kot je število, niz ali kakšen drug predmet. Void metode, ki ne vrnejo vrednosti, ne delujejo dobro za rekurzijo.

Zahteva, da mora biti rekurzivni klic zadnji stavek v njegovi klicni metodi, ne pomeni nujno, da je rekurzivni klic zadnja vrstica v metodi. Ustrezen klic repne rekurzije je mogoče najti tudi znotraj nadzorne strukture, kar pomeni, da lahko v izvorni kodi nadzorna struktura konča metodo in ne klic. Pomembna razlika v tem primeru je, da kontrolna struktura ni programski stavek, ampak vgrajeni del računalniškega jezika.

Rekurzija repa obstaja v številnih računalniških jezikih, vključno z Javo in C++. Pogosto je te rekurzivne klice mogoče prepisati z drugimi sredstvi, kot so zanke for, while ali stavki goto. Uporabnost rekurzije najdemo pri ustvarjanju številnih zaporednih klicev iste metode. Rekurzija je pogosto najčistejši in najpreprostejši način za izvajanje ponavljajočih se nalog.

Pogost primer repne rekurzije je metoda, ki izračuna faktorial števila. Ta postopek je idealen, ker se vsako število, ki se začne pri poljubnem številu, preden se pomnoži skupaj. Torej, da bi našli faktorial 5, bi pravilen postopek za to pomnožiti 5*4*3*2*1. Rekurzija se pojavi zaradi tega, kako je faktorial metoda strukturirana: če je faktorial 1, vrnite 1, sicer vrnite faktorial števila, danega metodi minus ena. Ta metoda je uporabna tudi zato, ker jo je mogoče enakovredno napisati z uporabo katere koli vrste repne rekurzije, z ali brez kontrolne izjave okoli končnega klica metode.

Repna rekurzija je le en primer več vrst rekurzije. Koncept v vseh vrstah rekurzije je v bistvu enak, da na nek način metoda kliče samo sebe. Od teh vrst je razlika repne rekurzije v tem, da je vrednost rekurzivnega klica takoj vrnjena in se v klicni metodi po tem klicu ne zgodi nič drugega.