Skip to main content

Co je to rekurzivní hovor?

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, načtení, návrat až do posledního šindelu.V tomto okamžiku se pokrývač může volně přesunout na další úlohu nebo jít domů.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 ukončí, když dojde k koncovému stavu.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í systémových paměťových zdrojů.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 smyčkou pro nebo while.Pokud je například cílem najít celkový počet zásob všech skladeb s čísly dílů větší než 999, A For Loop řekne programu, aby lokalizoval všechny kvalifikační instance a chvíli smyčky smyčka sdělí programu, aby smyčka provedla pouze během uvedenéhostav je platný.Lze říci, že rekurzivní volání kombinuje některé z funkcí 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 předání problému do funkce blíže k bodu, kdy je potřeba.