Mis on rekursiivne kõne?

Programmeerimisel on rekursiivne väljakutse alamprogrammi või funktsiooni sees olev käsk, mis käsib programmil sama alamprogrammi uuesti käivitada. Korduv jõudlus võib olla funktsiooni otsene tulemus või võidakse käivitada teine ​​funktsioon, mis omakorda viitab tagasi esimesele funktsioonile. Rekursiivsel kutsel on mõningaid sarnasusi kardetud lõpmatu tsükliga, kuid alamprogrammil on alati tingimuslause, mis ütleb programmile, millal rekursiooni kordamine lõpetada.

Rekursiooni mõistet saab ehk kõige paremini illustreerida näite abil. Oletame, et katuseehitaja paigaldab koju uusi katusesindleid. Alustuseks peab ta katusele kandma kimbu sindleid. Kui ta on esimese kimbu oma kohale naelutanud, peab ta redelist alla ronima, võtma teise kimbu ja naelutama selle oma kohale. Protsess jätkub “mine, too, tagasta” seeriana, kuni viimane sindel on peale pandud. Sel hetkel võib katusemeistril vabalt liikuda järgmisele tööle või koju minna.

Kuigi näide on liialt lihtsustatud, sisaldab see kõiki rekursiivse kõne elemente. Lähtepunkt on olemas, katuseehitaja peab vajaliku üles otsima, tagasi algusesse ja kui lõpptingimus on täidetud, siis peatuma. See on põhimõtteliselt see, mida programm teeb; see alustab, viib ellu toimingu, naaseb iseendasse ja lõpetab lõputingimuse saabudes.

Lõputingimust nimetatakse põhijuhtumiks. See on oluline kõigi rekursiivsete kõnede jaoks; ilma selleta jätkaks funktsiooni kordamist. Parimal juhul põhjustab see süsteemi mäluressursside tühjenemist. Tavaliselt ajab ülekoormus programmi mingil hetkel kokku, kuid probleemi avastamise ajaks võib see tekitada märkimisväärset kahju.

Kogenud programmeerijad võivad ära tunda sarnasuse rekursiivse kõne ja “for” või “while” tsükli vahel. Kui näiteks eesmärk on leida kõigi laovarude koguarv, mille osanumbrid on suuremad kui 999, käseb tsükkel “for” programmil leida kõik kvalifitseeruvad eksemplarid ja silmus “while” käsib programmil tsüklit käivitada. ainult siis, kui märgitud tingimus kehtib. Võib öelda, et rekursiivne kõne ühendab mõned nende silmuste omadused lausega “kui-siis-muu”; kui see tingimus on tõene, siis tehke seda või tehke midagi teisiti, kui tingimus on vale. Rekursioon võimaldab tavaliselt siiski kompaktsemat koodi ja võimaldab probleemi edastada vajalikule punktile lähemal asuvale funktsioonile.