Odporúčaná, 2019

Redakcia Choice

Rozdiel medzi rekurziou a iteraciou

Opakovanie a opakovanie opakovane vykonávajú sadu inštrukcií. Rekurzia je, keď vyhlásenie vo funkcii opakovane volá. Iterácia je, keď slučka opakovane vykoná, kým sa kontrolná podmienka nestane falošnou. Primárny rozdiel medzi rekurziou a iteráciou je to, že rekurzia je proces, vždy aplikovaný na funkciu. Iterácia sa aplikuje na súbor pokynov, ktoré chceme opakovane vykonať.

Porovnávacia tabuľka

Základ pre porovnanierekurziaopakovanie
základnéVyhlásenie v funkcii funkcie volá samotnú funkciu.Umožňuje opätovné vykonanie množiny inštrukcií.
formátPri rekurzívnej funkcii je zadaná len podmienka ukončenia (základný prípad).Iterácia zahŕňa inicializáciu, stav, vykonanie výkazu v smyčke a aktualizácia (prírastky a poklesy) riadiacej premennej.
ukončeniePodmienené vyhlásenie je zahrnuté v tele funkcie, aby sa funkcia vrátila bez vykonania rekurzívneho volania.Opakovanie opakovania sa opakuje až do dosiahnutia určitej podmienky.
podmienkaAk sa funkcia nezhoduje s určitým stavom nazvaným (základný prípad), vedie k nekonečnej rekurzii.Ak riadiaca podmienka v iterácii nie je nikdy falošná, vedie to k nekonečnej iteracii.
Nekonečné opakovanieNekonečná rekurzia môže systém zničiť.Nekonečná slučka opakovane používa cykly CPU.
aplikovanýRekurzia sa vždy uplatňuje na funkcie.Iterácia sa aplikuje na iterácie alebo "slučky".
StohTento zásobník sa používa na uloženie množiny nových lokálnych premenných a parametrov pri každom vyvolaní funkcie.Nepoužíva zásobník.
hornýRekurzia má réžiu opakovaných funkčných volaní.Žiadna réžia opakovaného volania funkcie.
rýchlosťPomalá realizácia.Rýchla realizácia.
Veľkosť kóduRekurzia znižuje veľkosť kódu.Iterácia je kód dlhší.

Definícia opakovania

C ++ umožňuje funkciu, ktorá sa volá vo svojom kóde. To znamená, že definícia funkcie má vlastnú funkciu. Niekedy sa to nazýva aj " kruhová definícia ". Súbor lokálnych premenných a parametrov použitých funkciou je novo vytvorený zakaždým, keď sa samotná funkcia volá a je uložená v hornej časti zásobníka. Ale vždy, keď sa niektorá funkcia volá, nevytvára novú kópiu tejto funkcie. Rekurzívna funkcia významne neznižuje veľkosť kódu a dokonca ani nevylepšuje využitie pamäte, ale v porovnaní s iteráciou to robí niektoré.

Ak chcete ukončiť rekurziu, musíte do definície funkcie zahrnúť výberové vyhlásenie, aby sa funkcia vrátila bez toho, aby ste jej povolili rekurzívny hovor. Neprítomnosť príkazu select v definícii rekurzívnej funkcie umožní funkcii v nekonečnej rekurzii, ktorá sa volá.

Chápeme rekurziu s funkciou, ktorá vráti faktoriál čísla.

 int factorial (int num) {int odpoveď; ak (num == 1) {return 1; } inak {answer = faktorial (num-1) * num; // rekurzívne volanie} návrat (odpoveď); } 

Vo vyššie uvedenom kóde sa v inej časti uvádza rekurzia, pretože výkaz volá funkciu faktorial (), v ktorom sa nachádza.

Definícia iterácie

Iterácia je proces vykonávania množiny inštrukcií opakovane, kým sa stav v iterácii vyhlásenie nestane falošným. Iteratívny výkaz obsahuje inicializáciu, porovnanie, vykonanie príkazov vo výkaze iterácie a nakoniec aktualizáciu riadiacej premennej. Po aktualizácii riadiacej premennej sa znova porovnáva a proces sa opakuje, kým sa podmienka v iterácii nezdarí. Iteratívne vyhlásenia sú "pre" slučku, "zatiaľ čo" slučka ", " do-while "slučka.

Príkaz iterácie nepoužíva zásobník na uloženie premenných. Preto je vykonanie výpovede iterácie rýchlejšie v porovnaní s rekurzívnou funkciou. Aj funkcia opakovania nemá riadiacu funkciu opakovaného volania funkcie, ktorá tiež robí jeho vykonanie rýchlejšie ako rekurzívna funkcia. Iterácia je ukončená, keď sa riadiaca podmienka stane nepravdivou. Absencia riadiacich podmienok v iterácii vyhlásenie môže mať za následok nekonečné slučky, alebo to môže spôsobiť chybu kompilácie.

Poďme chápať opakovanie vyššie uvedeného príkladu.

 int faktorial (int num) {int odpoveď = 1; // vyžaduje inicializáciu, pretože môže obsahovať hodnotu odpadu pred jeho inicializáciou pre (int t = 1; t> num; t ++) // iteračné {answer = answer * (t); návrat (odpoveď); }} 

Vo vyššie uvedenom kóde funkcia vráti faktoriál čísla pomocou iterácie.

Kľúčové rozdiely medzi rekurziou a iteraciou

  1. Rekurzia je, keď sa metóda v programe opakovane volá, zatiaľ čo opakovanie je, keď sa opakovane vykoná súbor pokynov v programe.
  2. Rekurzívna metóda obsahuje sadu inštrukcií, samotné výkazové volanie a koncovú podmienku, zatiaľ čo iteračné výkazy obsahujú inicializáciu, prírastok, stav, sadu inštrukcií v rámci slučky a riadiacu premennú.
  3. Podmienené vyhlásenie rozhodne, že hodnota ukončenia rekurzie a riadiacej veličiny sa rozhodnú pre ukončenie výkazu iterácie.
  4. Ak metóda nevedie k podmienkam ukončenia, vstupuje do nekonečnej rekurzie. Na druhej strane, ak riadiaca premenná nikdy nevedie ku koncovým hodnotám, iteračný príkaz sa nekonečne opakuje.
  5. Nekonečná rekurzia môže viesť k havárii systému, kým nekonečná iterácia spotrebuje cykly procesora.
  6. Rekurzia sa vždy uplatňuje na metódu, zatiaľ čo iterácia sa aplikuje na sadu inštrukcií.
  7. Premenné vytvorené počas rekurzie sú uložené na stohu, pričom iterácia nevyžaduje zásobník.
  8. Rekurzia spôsobuje réžiu opakovaných volaní funkcií, zatiaľ čo opakovanie nemá funkciu volania nad hlavou.
  9. V dôsledku funkcie volajúceho nad hlavou je vykonanie rekurzie pomalšie, zatiaľ čo vykonanie iterácie je rýchlejšie.
  10. Rekurzia znižuje veľkosť kódu, zatiaľ čo iterácie robia kód dlhší.

záver:

Rekurzívna funkcia je ľahko zapisovateľná, ale nepracujú dobre v porovnaní s iteráciou, zatiaľ čo opakovanie je ťažké písať, ale ich výkon je dobrý v porovnaní s rekurziou.

Top