Co je to rekurzivní volání?
V programování je rekurzivní volání příkazem v rámci podprogramu nebo funkce, 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á se zase odkazuje zpět na první funkci. Rekurzivní volání má určité podobnosti s obávanou nekonečnou smyčkou, ale podprogramy má vždy podmíněné prohlášení, které říká programu, kdy 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. Pro začátek musí na střechu nést svazek šindelů. Jakmile přibil první svazek na místě, musí vyšplhat po žebříku, získat další svazek a přibít ho na místo. Proces pokračuje jako řada „Go, Fetch, Return“, dokud nebude použit poslední šindele. V tomto okamžiku se pokrývač může volně přesunout k další práci nebo jít domů.
ačkoliv příklad is příliš zjednodušením obsahuje všechny prvky rekurzivního hovoru. Existuje výchozí bod, pokrývač musí načíst to, co potřebuje, vrátit se na začátek a když je splněna konečná podmínka, zastavte se. To je v podstatě to, co program dělá; Začíná, implementuje akci, vrací se k sobě a končí, když dojde k koncovému stavu.
Koncový stav se označuje jako základní případ. Je to nezbytné pro všechny rekurzivní hovory; Bez ní by se funkce i nadále opakovala. V nejlepším případě to má za následek vyčerpání zdrojů paměti systému. Normálně přetížení v určitém okamžiku zhoršuje program, ale v době, kdy je problém objeven, může být způsobeno významné poškození.
Zkušení programátoři by mohli rozpoznat podobnost mezi rekurzivním hovorem a „pro“ nebo „while“. Pokud je například cílem najít celkový počet zásob veškerého skladu s částí nUmbers větší než 999, smyčka „pro“ říká programu, aby vyhledal všechny kvalifikační instance a „while“ smyčka řekne programu pro provedení smyčky pouze během uvedené podmínky. Lze říci, že rekurzivní hovor kombinuje některé z funkcí těchto smyček s prohlášením „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 předání problému do funkce blíže k bodu, kdy je potřeba.