Doporučená, 2024

Redakce Choice

Rozdíl mezi rekurzí a iterací

Rekurze a iterace provádějí opakovaně soubor instrukcí. Rekurze je, když se prohlášení ve funkci opakovaně volá. Iterace je, když smyčka opakovaně provede, dokud se podmínka řízení nestane falešnou. Primární rozdíl mezi rekurzí a iterací je to, že rekurze je proces, vždy aplikovaný na funkci. Iterace je aplikována na soubor instrukcí, které chceme opakovaně provádět.

Srovnávací graf

Základ pro srovnáníRekonstrukceOpakování
ZákladníVýkaz v těle funkce volá funkci sám.Umožňuje opakovaně provádět sadu instrukcí.
FormátV rekurzivní funkci je zadána pouze podmínka ukončení (základní případ).Iterace zahrnuje inicializaci, podmínku, provedení příkazu v rámci smyčky a aktualizaci (přírůstky a úbytky) řídicí proměnné.
UkončeníPodmíněný příkaz je obsažen v těle funkce k vynucení, aby se funkce vrátila bez provedení volání rekurze.Příkaz iterace je opakovaně prováděn, dokud není dosaženo určité podmínky.
StavPokud se funkce neshoduje s některými podmínkami, které se nazývají (základní případ), vede k nekonečné rekurzi.Pokud se podmínka ovládání v příkazu iterace nikdy nestane falešnou, vede to k nekonečné iteraci.
Nekonečné opakováníNekonečná rekurze může zhroutit systém.Infinite smyčka používá cykly CPU opakovaně.
AplikovanýRekonstrukce je vždy aplikována na funkce.Iterace je aplikována 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 volá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 snižuje velikost kódu.Iterace dělá kód delší.

Definice rekurze

C ++ umožňuje, aby se funkce volala v rámci svého kódu. To znamená, že definice funkce má vlastní funkční volání. Někdy se také nazývá „ kruhová definice “. Soubor lokálních proměnných a parametrů používaných funkcí je nově vytvořen pokaždé, když se funkce zavolá a je uložena v horní části zásobníku. Ale pokaždé, když se funkce volá sama, nevytváří novou kopii této funkce. Rekurzivní funkce významně nesnižuje velikost kódu a ani nezvyšuje využití paměti, ale ve srovnání s iterací.

Chcete-li rekurzi ukončit, musíte v definici funkce zahrnout příkaz select, který vynutí funkci, aby se vrátila, aniž by se rekurzivní volání na sebe. Nepřítomnost příkazu select v definici rekurzivní funkce povolí funkci v nekonečné rekurzi jednou volal.

Pojďme pochopit rekurzi s funkcí, která vrátí faktoriál čísla.

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

Ve výše uvedeném kódu se v příkazu v jiné části zobrazuje rekurze, protože příkaz volá funkci faktoriál (), ve které se nachází.

Definice iterace

Iterace je proces provádění sady instrukcí opakovaně, dokud se podmínka v iteračním prohlášení nestane falešnou. Příkaz iterace obsahuje inicializaci, porovnání, provedení příkazů uvnitř iteračního příkazu a nakonec aktualizaci řídicí proměnné. Po aktualizaci řídicí proměnné se porovná znovu a proces se opakuje, dokud se podmínka v iteračním příkazu neukáže jako nepravdivá. Iterační příkazy jsou smyčka „for“, smyčka „while“, smyčka „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 rychlejší ve srovnání s rekurzivní funkcí. Dokonce ani iterační funkce nemají režii opakovaného volání funkce, která také urychluje jeho provádění než rekurzivní funkce. Iterace se ukončí, když se podmínka řízení stane nepravdivá. Absence podmínky kontroly v příkazu iterace může mít za následek nekonečnou smyčku nebo může způsobit chybu kompilace.

Rozumíme iteraci týkající se výše uvedeného příkladu.

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

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

Klíčové rozdíly mezi rekurzí a iterací

  1. Rekurze je, když metoda v programu opakovaně volá sám, zatímco iterace je, když je soubor instrukcí v programu opakovaně prováděn.
  2. Rekurzivní metoda obsahuje sadu instrukcí, příkaz volání samotný a podmínku ukončení, zatímco iterační příkazy obsahují inicializaci, přírůstek, podmínku, sadu instrukcí uvnitř smyčky a kontrolní proměnnou.
  3. Podmíněný příkaz rozhoduje o ukončení hodnoty rekurze a řídicí proměnné o ukončení příkazu iterace.
  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 iteruje nekonečně.
  5. Nekonečná rekurze může vést k havárii systému, zatímco nekonečná iterace spotřebuje 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 jsou uloženy v 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 volající nad hlavou.
  9. Vzhledem k tomu, že funkce zavolání recese je pomalejší, provádění iterace je rychlejší.
  10. Rekurze snižuje velikost kódu, zatímco iterace dělají kód delší.

Závěr:

Rekurzivní funkce se snadno zapisuje, ale ve srovnání s iterací neplní dobře, zatímco iterace je těžké psát, ale jejich výkon je dobrý ve srovnání s rekurzí.

Top