Kas yra uodegos rekursija?

Tail rekursija yra programavimo metodo iškvietimo tipas, kai metodas iškviečia save, tada iš karto grąžina antrojo iškvietimo reikšmę. Kitaip tariant, uodegos rekursija įvyksta, kai galutinis teiginys metodo viduje yra kitas to paties metodo iškvietimas. Antrojo metodo iškvietimo parametrai paprastai skiriasi nuo pirmojo, tačiau tai nėra būtina. Kad ši rekursija veiktų, pats iškviestas metodas turi grąžinti konkrečią reikšmę, pvz., skaičių, eilutę ar kokį nors kitą objektą. Tuštieji metodai, kurie negrąžina reikšmės, netinka rekursijai.

Reikalavimas, kad rekursinis skambutis turi būti paskutinis jo iškvietimo metodo teiginys, nebūtinai reiškia, kad rekursinis skambutis yra paskutinė metodo eilutė. Tinkamą uodegos rekursijos iškvietimą taip pat galima rasti valdymo struktūroje, o tai reiškia, kad šaltinio kode valdymo struktūra gali užbaigti metodą, o ne iškvietimą. Svarbus skirtumas šiuo atveju yra tas, kad valdymo struktūra yra ne programavimo sakinys, o integruota kompiuterio kalbos dalis.

Tail rekursija egzistuoja daugelyje kompiuterių kalbų, įskaitant Java ir C++. Dažnai šiuos rekursinius skambučius galima perrašyti naudojant kitas priemones, pvz., for loops, while ciklus arba goto sakinius. Rekursijos naudingumas randamas kuriant daug nuoseklių iškvietimų į tą patį metodą. Rekursija dažnai yra švariausias ir lengviausias būdas atlikti pasikartojančias užduotis.

Dažnas uodegos rekursijos pavyzdys yra metodas, apskaičiuojantis skaičiaus faktorialą. Šis procesas yra idealus, nes pradedant nuo bet kurio skaičiaus, kiekvienas skaičius prieš jį padauginamas. Taigi, norint rasti koeficientą 5, tinkamas procesas būtų padauginti iš 5*4*3*2*1. Rekursija atsiranda dėl faktorinio metodo struktūros: jei faktorialas yra 1, grąžinkite 1, kitu atveju grąžinkite metodui duoto skaičiaus faktorialą, atėmus vieną. Šis metodas taip pat naudingas, nes jį lygiaverčiai galima parašyti naudojant bet kurio tipo uodegos rekursiją, su valdymo sakiniu arba be jo apie galutinį metodo iškvietimą.

Uodegos rekursija yra tik vienas iš kelių rekursijos tipų pavyzdžių. Visų tipų rekursijos koncepcija iš esmės yra ta pati, kurią tam tikru būdu metodas vadina pats. Iš šių tipų uodegos rekursijos skirtumas yra tas, kad iš karto grąžinama rekursinio skambučio reikšmė, o po to iškvietimo metodu nieko daugiau neįvyksta.