Co je rekurzivní hovor?
V programování je rekurzivní volání příkaz v podprogramu nebo funkci, který říká programu, aby znovu spustil stejný podprogram. Opakovací výkon může být přímým výsledkem funkce nebo může být spuštěna druhá funkce, která zase odkazuje na první funkci. Rekurzivní volání má určité podobnosti s obávanou nekonečnou smyčkou, ale podprogram má vždy podmíněný příkaz, který říká programu, kdy má přestat opakovat rekurzi.
Koncept rekurze je možná nejlépe ilustrován pomocí příkladu. Předpokládejme, že pokrývač aplikuje nové šindele na domov. Nejprve musí nést svazek šindelů na střechu. Jakmile přibije první svazek na místě, musí sestoupit dolů po žebříku, vytáhnout další svazek a přibít ho na místo. Proces pokračuje jako série „go, fetch, return“, dokud nebyl použit poslední šindel. V tuto chvíli může pokrývač volně přejít na další zaměstnání nebo jít domů.
Přestože je příkladem nadměrné zjednodušení, obsahuje všechny prvky rekurzivního volání. Existuje počáteční bod, pokrývač musí načíst, co potřebuje, vrátit se na začátek a po splnění konečné podmínky se musí zastavit. To je v podstatě to, co program dělá; spustí, provede akci, vrátí se k sobě a ukončí, když nastane koncová podmínka.
Konečný stav se označuje jako základní případ. Je to nezbytné pro všechna rekurzivní volání; bez toho by se funkce pokračovala v opakování. Výsledkem je v nejlepším případě vyčerpání systémových paměťových zdrojů. Normálně přetížení program v určitém okamžiku havaruje, ale v době, kdy je problém objeven, může dojít k významnému poškození.
Zkušení programátoři mohou rozpoznat podobnost mezi rekurzivním hovorem a smyčkou „for“ or „while“. Pokud je například cílem najít celkový počet zásob všech zásob s čísly dílů většími než 999, smyčka „for“ řekne programu, aby lokalizoval všechny kvalifikující instance, a smyčka „while“ řekne programu, aby provedl smyčku pouze pokud je uvedená podmínka platná. Mohlo by se říci, že rekurzivní volání kombinuje některé vlastnosti těchto smyček s příkazem „if-then-else“; pokud je tato podmínka pravdivá, udělejte to, nebo jinak udělejte něco jiného, pokud je podmínka nepravdivá. Rekurze však obvykle umožňuje kompaktnější kód a umožňuje, aby byl problém předán funkci blíže bodu, který je potřebný.