Klíčový rozdíl: Při programování lze rekurze vysvětlit zvážením rekurzivní funkce. Rekurzivní funkce je taková, která znovu vyzývá k opakování kódu. Na druhou stranu iterace je dosažena iterační funkcí, která opakuje nějakou část kódu.
Při programování se rekurze a iterace používají k dosažení opakování. Odkazují na proces, který se opakuje několikrát. Rekurze vychází z přístupu, ve kterém se něco týká, dokud není splněna podmínka. Metoda je řečena jako rekurzivní, jestliže se může nazývat buď přímo, nebo nepřímo -
{{
... název() ...
}}
nebo
prázdné jméno ()
{{
... hra () ...
}}
prázdná hra () {
... název() ...
}}
Pro úspěšné rekurze je třeba mít na paměti, že každý hovor uskutečněný v procesu rekurze musí zjednodušit výpočet. Rekurze je dosažena definováním základního případu.
int faktorial (int N)
{{
pokud (N == 0) vrátí 1;
jiný návrat (N * faktorial (N-1));
}}
V tomto příkladu lze rekurzi snadno vidět ve výkaze (N * factorial (N-1)), kde volá faktoriální funkci znovu. Rekurze je velmi užitečná, protože pomáhá zkrátit kód. Nicméně, rekurze je trochu pomalý výkon.
funkce faktoriál (n)
{{
var smyčka, výsledek;
výsledek = 1;
pro (smyčka = 1; smyčka <= n; smyčka ++)
{{
výsledek = výsledek * smyčka;
}}
výsledek návratu;
}}
V tomto příkladu je smyčka dosažena použitím celých čísel od 1 do n a smyčka <= n je použita jako kritérium pro zastavení další smyčky. Můžeme tedy dospět k závěru, že stejné výsledky lze dosáhnout použitím rekurze a iterace. Oba jsou však založeny na přístupu, který se trochu liší. Libovolný rekurzivní algoritmus může být také napsán pomocí iterací (smyček).
Srovnání mezi opakováním a iterací:
Rekurze | Opakování | |
Definice | Rekurze se týká rekurzivní funkce, ve které se znovu vyzývá k opakování kódu. | Iterace je dosažena iterační funkcí, která smyčky opakuje některé části kódu. |
Důležitý bod | Musí být určen základní případ | Musí být určena podmínka ukončení |
Výkon | Srovnatelně pomalý | Srovnatelně rychle |
Využití paměti | Srovnatelně více | Srovnatelně méně |
Kód | Menší | Delší |
Nekonečné opakování | Nekonečná rekurze může způsobit zhroucení systému | Nekonečná smyčka opakovaně spotřebovává cykly CPU |
Struktura | Výběr | Opakování |
Místní proměnné | Není požadováno | Povinný |