Rozdiel medzi rekurziou a iteráciou

Autor: Laura McKinney
Dátum Stvorenia: 1 Apríl 2021
Dátum Aktualizácie: 4 Smieť 2024
Anonim
Rozdiel medzi rekurziou a iteráciou - Technológie
Rozdiel medzi rekurziou a iteráciou - Technológie

Obsah


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

  1. Porovnávacia tabuľka
  2. definícia
  3. Kľúčové rozdiely
  4. záver

Porovnávacia tabuľka

Základ pre porovnanierekurziaopakovanie
základnéVyhlásenie v tele funkcie volá samotnú funkciu.Umožňuje opakované vykonanie súboru pokynov.
formátV rekurzívnej funkcii sú špecifikované iba podmienky ukončenia (základný prípad).Iterácia zahŕňa inicializáciu, stav, vykonanie príkazu v rámci slučky a aktualizáciu (prírastky a úbytky) riadiacej premennej.
ukončenieV tele funkcie je zahrnutý podmienený príkaz, ktorý prinúti funkciu vrátiť sa bez vykonania rekurzívneho volania.Príkaz iterácie sa opakovane vykonáva, kým sa nedosiahne určitá podmienka.
podmienkaAk funkcia nekonverguje na nejaký stav nazývaný (základný prípad), vedie to k nekonečnej rekurzii.Ak sa kontrolná podmienka vo vyhlásení o iterácii nikdy nestane falošnou, vedie k nekonečnej iterácii.
Nekonečné opakovanieNekonečná rekurzia môže zrútiť systém.Nekonečná slučka využíva cykly CPU opakovane.
aplikovanýRekurzia je vždy aplikovaná na funkcie.Iterácia sa používa na iteračné príkazy alebo „slučky“.
StohZásobník sa používa na uloženie sady nových lokálnych premenných a parametrov pri každom volaní funkcie.Nepoužíva zásobník.
hornýRekurzia má réžiu opakovaných volaní funkcií.Žiadne opakované volanie funkcie.
rýchlosťPomalé vykonávanie.Rýchla realizácia.
Veľkosť kóduRekurzia zmenšuje veľkosť kódu.Iterácia predlžuje kód.


Definícia rekurzie

C ++ umožňuje funkcii volať sa v rámci svojho kódu. To znamená, že definícia funkcie má volanie funkcie k sebe. Niekedy sa tiež nazýva „kruhová definícia". Sada lokálnych premenných a parametrov, ktoré funkcia používa, sa vytvára vždy, keď funkcia volá sama a je uložená v hornej časti zásobníka. Zakaždým, keď sa však funkcia volá sama, nevytvorí novú kópiu tejto funkcie. Rekurzívna funkcia významne nezmenšuje veľkosť kódu a nezlepšuje ani využitie pamäte, ale v porovnaní s iteráciou robí niečo.

Ak chcete ukončiť rekurziu, musíte do definície funkcie zahrnúť príkaz select, ktorý prinúti funkciu vrátiť sa, bez toho, aby ste na seba rekurzívne volali. Neprítomnosť príkazu select v definícii rekurzívnej funkcie umožní, aby bola funkcia v nekonečnej rekurzii raz volaná.


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

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

Vo vyššie uvedenom kóde príkaz v inej časti ukazuje rekurziu, pretože príkaz nazýva funkčný faktoriál (), v ktorom sa nachádza.

Definícia iterácie

Iterácia je proces opakovaného vykonávania sady inštrukcií, až kým sa podmienka v iteračnom príkaze nestane nepravdivou. Príkaz iterácie obsahuje inicializáciu, porovnanie, vykonávanie príkazov vo vyhlásení iterácie a nakoniec aktualizáciu kontrolnej premennej. Po aktualizácii riadiacej premennej sa znova porovná a proces sa opakuje, kým sa podmienka v iteračnom príkaze neukáže ako nepravdivá. Príkazy iterácie sú cykly „for“, „while“, „do-while“.

Príkaz iterácie nepoužíva zásobník na ukladanie premenných. Preto je vykonanie iteračného príkazu rýchlejšie v porovnaní s rekurzívnou funkciou. Dokonca ani iteračná funkcia nemá réžiu opakovaného volania funkcie, ktoré tiež robí jej vykonanie rýchlejšie ako rekurzívna funkcia. Iterácia sa ukončí, keď sa kontrolná podmienka stane nepravdivou. Neprítomnosť kontrolných podmienok vo vyhlásení o iterácii môže mať za následok nekonečnú slučku alebo môže spôsobiť chybu kompilácie.

Pochopme iteráciu týkajúcu sa vyššie uvedeného príkladu.

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

Vo vyššie uvedenom kóde funkcia vráti faktoriál čísla pomocou iteračného príkazu.

  1. Rekurzia je, keď sa metóda v programe opakovane volá sama, zatiaľ čo iterácia je, keď sa opakovane vykonáva sada inštrukcií v programe.
  2. Rekurzívna metóda obsahuje množinu inštrukcií, samotné volanie príkazu a podmienku ukončenia, zatiaľ čo iteračné príkazy obsahujú inicializáciu, inkrement, stav, sadu inštrukcií v rámci slučky a kontrolnú premennú.
  3. Podmienené vyhlásenie rozhodne o ukončení hodnoty rekurzie a hodnota kontrolnej premennej rozhodne o ukončení vyhlásenia o iterácii.
  4. Ak metóda nevedie k podmienke ukončenia, vstupuje do nekonečnej rekurzie. Na druhej strane, ak riadiaca premenná nikdy nevedie k hodnote ukončenia, iteračný príkaz sa nekonečne opakuje.
  5. Nekonečná rekurzia môže viesť k zlyhaniu systému, zatiaľ čo nekonečná iterácia vyžaduje cykly CPU.
  6. Rekurzia sa vždy používa na metódu, zatiaľ čo iterácia sa uplatňuje na množinu inštrukcií.
  7. Premenné vytvorené počas rekurzie sú uložené v zásobníku, zatiaľ čo iterácia nevyžaduje zásobník.
  8. Rekurzia spôsobuje réžiu opakovaného volania funkcií, zatiaľ čo iterácia nemá funkciu volajúce réžiu.
  9. Z dôvodu funkcie volania je režijné vykonávanie rekurzie pomalšie, zatiaľ čo vykonávanie iterácie je rýchlejšie.
  10. Rekurzia zmenšuje veľkosť kódu, zatiaľ čo iterácie kód predlžujú.

záver:

Rekurzívnu funkciu je ľahké zapísať, ale v porovnaní s iteráciou nefunguje dobre, zatiaľ čo iteráciu je ťažké zapísať, ale jej výkon je v porovnaní s rekurziou dobrý.