Mis on sabarekursioon?

Sabarekursioon on programmeerimismeetodi kutse tüüp, kus meetod kutsub ennast ise ja tagastab seejärel kohe selle teise väljakutse väärtuse. Teisisõnu, sabarekursioon toimub siis, kui meetodi lõpplause on sama meetodi teine ​​​​kutse. Teise meetodi kutse parameetrid erinevad üldiselt esimese meetodi parameetritest, kuid see pole vajalik. Selle rekursiooni toimimiseks peab enda sees kutsutav meetod tagastama konkreetse väärtuse, näiteks numbri, stringi või mõne muu objekti. Tühised meetodid, mis väärtust ei tagasta, ei tööta rekursiooni puhul hästi.

Nõue, et rekursiivne kõne peab olema selle kutsumismeetodi viimane lause, ei tähenda tingimata, et rekursiivne kõne on meetodi viimane rida. Korraliku sabarekursioonikutse võib leida ka juhtstruktuuri seest, mis tähendab, et lähtekoodis võib juhtstruktuur meetodi lõpetada, mitte kõne. Oluline erinevus on antud juhul see, et juhtimisstruktuur ei ole programmeerimislause, vaid arvutikeele sisseehitatud osa.

Tail rekursioon on olemas paljudes arvutikeeltes, sealhulgas Java ja C++. Sageli saab neid rekursiivseid kõnesid ümber kirjutada muude vahenditega, näiteks for loops, while tsüklid või goto laused. Rekursiooni kasulikkus leitakse, kui luuakse samale meetodile palju järjestikuseid väljakutseid. Rekursioon on sageli kõige puhtam ja lihtsaim viis korduvate ülesannete täitmiseks.

Sabarekursiooni tavaline näide on meetod, mis arvutab arvu faktoriaali. See protsess on ideaalne, kuna alates mis tahes arvust korrutatakse iga arv enne seda. Niisiis, 5 faktoriaali leidmiseks oleks õige protsess 5*4*3*2*1 korrutamine. Rekursioon tuleneb faktoriaalmeetodi ülesehitusest: kui faktoriaal on 1, tagasta 1, vastasel juhul tagasta meetodile antud arvu faktoriaal miinus üks. See meetod on kasulik ka seetõttu, et seda saab samaväärselt kirjutada, kasutades mõlemat tüüpi sabarekursiooni, koos juhtlausega või ilma viimase meetodi kutse ümber.

Sabarekursioon on vaid üks näide mitmest tüüpi rekursioonist. Kõikide rekursioonitüüpide kontseptsioon on sisuliselt sama, mida teatud viisil meetod nimetab. Nendest tüüpidest eristab sabarekursiooni see, et rekursiivse kõne väärtus tagastatakse kohe ja pärast kõnet ei toimu kutsumismeetodis midagi muud.