Rozdíl mezi rekurzí a iterací

Autor: Laura McKinney
Datum Vytvoření: 1 Duben 2021
Datum Aktualizace: 4 Smět 2024
Anonim
Rozdíl mezi rekurzí a iterací - Technologie
Rozdíl mezi rekurzí a iterací - Technologie

Obsah


Rekurze i iterace opakovaně vykonávají sadu pokynů. Rekurze je, když se příkaz ve funkci opakovaně volá. Iterace je, když se smyčka opakovaně provádí, dokud se kontrolní podmínka nestane falešnou. Primární rozdíl mezi rekurzí a iterací je, že je rekurze je proces, vždy aplikovaný na funkci. opakování je aplikován na soubor instrukcí, které chceme opakovaně provádět.

  1. Srovnávací tabulka
  2. Definice
  3. Klíčové rozdíly
  4. Závěr

Srovnávací tabulka

Základ pro srovnáníRekurzeOpakování
ZákladníPříkaz v těle funkce volá samotnou funkci.Umožňuje opakované provádění sady pokynů.
FormátV rekurzivní funkci je zadána pouze podmínka ukončení (základní případ).Iterace zahrnuje inicializaci, podmínku, provedení příkazu ve smyčce a aktualizaci (přírůstky a úbytky) řídicí proměnné.
UkončeníV těle funkce je obsažen podmíněný příkaz k tomu, aby se funkce vrátila bez provedení rekurzního volání.Příkaz iterace se opakovaně provádí, dokud není dosaženo určité podmínky.
StavPokud funkce nekonverguje k některému stavu zvanému (základní případ), vede to k nekonečné rekurzi.Pokud se kontrolní podmínka v iteračním příkazu nikdy nestane falešnou, vede to k nekonečné iteraci.
Nekonečné opakováníNekonečná rekurze může systém havarovat.Nekonečná smyčka používá cykly CPU opakovaně.
AplikovanýRekurze je vždy aplikována na funkce.Iterace se aplikuje na iterační příkazy nebo „smyčky“.
ZásobníkZásobník se používá k uložení sady nových lokálních proměnných a parametrů při každém vyvolání funkce.Nepoužívá zásobník.
RežieRekurze má režii opakovaných volání funkcí.Žádné opakované volání funkce.
RychlostPomalé provádění.Rychlé provedení.
Velikost kóduRekurze zmenšuje velikost kódu.Iterace prodlouží kód.


Definice rekurze

C ++ umožňuje funkci volat sama sebe v rámci svého kódu. To znamená, že definice funkce má volání funkce k sobě. Někdy se také nazývá „kruhová definice“. Sada lokálních proměnných a parametrů použitých funkcí je nově vytvořena pokaždé, když funkce volá sama a jsou uloženy v horní části zásobníku. Ale pokaždé, když funkce volá sama, nevytvoří novou kopii této funkce. Rekurzivní funkce významně nesnižuje velikost kódu a nezlepšuje ani využití paměti, ale v porovnání s iterací něco dělá.

Chcete-li ukončit rekurzi, musíte do definice funkce zahrnout příkaz select, aby se funkce vrátila, aniž by se na sebe vrátilo rekurzivní volání. Absence příkazu select v definici rekurzivní funkce umožní funkci v nekonečné rekurzi, jakmile ji jednou zavoláme.


Pochopme rekurzi s funkcí, která vrátí faktoriál čísla.

int factorial (int num) {int odpověď; if (num == 1) {návrat 1; } else {answer = factorial (num-1) * num; // rekurzivní volání} návrat (odpověď); }

Ve výše uvedeném kódu příkaz v jiné části ukazuje rekurzi, protože příkaz volá funkci factorial (), ve které je umístěn.

Definice iterace

Iterace je proces opakovaného provádění sady instrukcí, dokud není podmínka v iteračním příkazu nepravdivá. Příkaz iterace zahrnuje inicializaci, porovnání, provádění příkazů uvnitř iteračního příkazu a nakonec aktualizaci kontrolní proměnné. Po aktualizaci řídicí proměnné je znovu porovnána a proces se opakuje, dokud se podmínka v iteračním příkazu ukáže jako nepravdivá. Příkazy iterace jsou smyčky „for“, „while“, „do-while“.

Příkaz iterace nepoužívá zásobník k ukládání proměnných. Provedení iteračního příkazu je tedy ve srovnání s rekurzivní funkcí rychlejší. Dokonce ani iterační funkce nemá režii opakovaného volání funkce, která také zrychluje její provádění než rekurzivní funkce. Iterace se ukončí, jakmile se stav kontroly stane falešným. Nepřítomnost kontrolních podmínek v iteračním příkazu může vést k nekonečné smyčce nebo může způsobit chybu kompilace.

Rozumíme iteraci výše uvedeného příkladu.

int factorial (int num) {int answer = 1; // potřebuje inicializaci, protože může obsahovat hodnotu odpadu před inicializací pro (int t = 1; t> num; t ++) // iterace {answer = answer * (t); návrat (odpověď); }}

Ve výše uvedeném kódu funkce vrátí faktoriál čísla pomocí iteračního příkazu.

  1. Rekurze je, když se metoda v programu opakovaně volá sama, zatímco iterace je, když se opakovaně provádí sada instrukcí v programu.
  2. Rekurzivní metoda obsahuje sadu instrukcí, volání samotného příkazu a podmínku ukončení, zatímco iterační příkazy obsahují inicializaci, inkrement, podmínku, sadu instrukcí v rámci smyčky a řídicí proměnnou.
  3. Podmíněný příkaz rozhodne o ukončení rekurze a hodnota ovládací proměnné rozhodne o ukončení iteračního příkazu.
  4. Pokud metoda nevede k podmínce ukončení, vstupuje do nekonečné rekurze. Na druhou stranu, pokud řídicí proměnná nikdy nevede k hodnotě ukončení, iterační příkaz nekonečně iteruje.
  5. Nekonečná rekurze může vést k selhání systému, zatímco nekonečná iterace spotřebovává cykly CPU.
  6. Rekurze je vždy aplikována na metodu, zatímco iterace je aplikována na sadu instrukcí.
  7. Proměnné vytvořené během rekurze se ukládají do zásobníku, zatímco iterace nevyžaduje zásobník.
  8. Rekurze způsobuje režii opakovaného volání funkce, zatímco iterace nemá funkci vyvolávající režii.
  9. Díky funkci vyvolání režie je rekurze pomalejší, zatímco provádění iterace je rychlejší.
  10. Rekurze zmenšuje velikost kódu, zatímco iterace kód prodlužují.

Závěr:

Rekurzivní funkci lze snadno zapsat, ale ve srovnání s iterací nefungují dobře, zatímco iteraci je obtížné zapsat, ale její výkon je ve srovnání s rekurzí dobrý.