Ajánlott, 2024

Szerkesztő Választása

A rekurzió és az iteráció közötti különbség

A rekurzió és az iteráció ismételten végrehajtja az utasításokat. A rekurzió akkor jelenik meg, amikor egy függvény egy kijelentése ismételten magára hívja. Az iteráció akkor jelenik meg, amikor a hurok ismételten végrehajtódik, amíg a szabályozási feltétel nem hamis. Az elsődleges különbség a rekurzió és az iteráció között az, hogy egy rekurzió egy folyamat, amely mindig egy függvényre vonatkozik. Az iterációt az utasítások halmazára alkalmazzuk, amelyet ismételten végrehajtunk.

Összehasonlító táblázat

Az összehasonlítás alapjarekurzióIsmétlés
AlapvetőA függvény egy testreszabása maga nevezi a függvényt.Lehetővé teszi az utasításkészlet ismételt végrehajtását.
FormátumA rekurzív függvényben csak a terminálállapot (alapeset) van megadva.Az iteráció magában foglalja az inicializálást, az állapotot, a cikluson belüli utasítás végrehajtását és a vezérlő változó frissítését (lépések és lépések).
befejezésFeltételes utasítás szerepel a függvény testében, hogy a függvényt visszaállítsa a rekurziós hívás végrehajtása nélkül.Az iterációs utasítás ismételten végrehajtásra kerül, amíg egy bizonyos feltétel el nem éri.
FeltételHa a függvény nem konvergál a hívott állapothoz (alapeset), végtelen rekurzióhoz vezet.Ha a szabályozási feltétel az iterációs utasításban soha nem válik hamisnak, végtelen iterációhoz vezet.
Végtelen ismétlésA végtelen rekurzió összeomlik a rendszert.A végtelen ciklus a CPU ciklusokat többször használja.
AlkalmazottA rekurziót mindig a funkciókra alkalmazzák.Az iteráció az iterációs utasításokra vagy a "hurkokra" vonatkozik.
KazalA verem az új helyi változók és paraméterek tárolására szolgál minden alkalommal, amikor a függvényt hívják.Nem használ verem.
FelsőA rekurzió rendelkezik az ismételt függvényhívások fölött.Nincs ismételt funkcióhívás.
SebességLassú a végrehajtás.Gyors végrehajtás.
A kód méreteA rekurzió csökkenti a kód méretét.Az elterelés a kódot tovább növeli.

A rekurzió meghatározása

A C ++ lehetővé teszi, hogy a függvény kódja alatt hívja magát. Ez azt jelenti, hogy a függvény definíciója önmagára hívja a funkciót. Néha „ körkörös definíciónak ” is nevezik. A funkció által használt helyi változók és paraméterek halmaza újonnan jön létre minden alkalommal, amikor a függvény hívja magát, és a verem tetején tárolódik. De minden alkalommal, amikor egy függvény hívja magát, nem hoz létre új funkciót a funkcióról. A rekurzív függvény nem csökkenti jelentősen a kód méretét, és nem is javítja a memóriahasználatot, hanem az iterációhoz képest.

A rekurzió megszüntetéséhez be kell állítania egy kijelölést a függvény definíciójába, hogy a függvényt visszaállítsa anélkül, hogy rekurzív hívást adna magának. A rekurzív függvény definíciójában a kiválasztási utasítás hiánya lehetővé teszi, hogy a függvény végtelen rekurzióban legyen.

Megértjük a rekurziót olyan funkcióval, amely visszaadja a szám tényezőjét.

 int faktori (int num) {int answer; ha (num == 1) {visszatér 1; } other {answer = tényező (szám-1) * num; // rekurzív hívás} visszatérés (válasz); } 

A fenti kódban a nyilatkozat másrészről mutatja a rekurziót, mivel a nyilatkozat a függvény tényezőt () tartalmazza, amelyben tartózkodik.

Az iteráció meghatározása

Az iteráció az utasításkészlet ismételt végrehajtása, amíg az iterációs utasítás feltétele nem hamis. Az iterációs utasítás tartalmazza az iterációs utasításon belüli állítások inicializálását, összehasonlítását, végrehajtását és végül a vezérlő változó frissítését. A vezérlő változó frissítése után újra összehasonlítjuk, és a folyamat ismétlődik, amíg az iterációs utasítás feltétele nem hamis. Az iterációs utasítások "for" hurok, "ciklus", "do-time" hurok.

Az iterációs utasítás nem használ veremet a változók tárolására. Ezért az iterációs utasítás végrehajtása gyorsabb a rekurzív függvényhez képest. Még az iterációs függvény nem rendelkezik az ismétlődő függvényhívás fölött, ami gyorsabbá teszi a végrehajtását, mint a rekurzív funkció. Az iteráció akkor fejeződik be, ha a szabályozási feltétel hamis. A szabályozási feltétel hiánya az iterációs utasításban végtelen hurkot eredményezhet, vagy összeállítási hibát okozhat.

Tegyük fel, hogy a fenti példánál iteráció van.

 int tényező (int szám) {int answer = 1; // inicializálást igényel, mert az (int t = 1; t> num; t ++) inicializálása előtt szemétértéket tartalmazhat // iteráció {answer = válasz * (t); visszatérés (válasz); }} 

A fenti kódban a függvény visszaadja a szám tényezőjét iterációs utasítással.

A rekurzió és az elterelés közötti különbségek

  1. A rekurzió akkor történik, amikor a programban lévő módszer ismételten felhívja magát, míg az iteráció az, amikor a programban lévő utasítások egy sorát ismételten végrehajtják.
  2. A rekurzív módszer utasítások halmazát, önmagát meghívó kijelentést és végződési feltételt tartalmaz, míg az iterációs utasítások tartalmazzák a hurokon belüli inicializálást, növekményt, állapotot, utasításkészletet és egy vezérlő változót.
  3. A feltételes utasítás úgy dönt, hogy a rekurzió és a vezérlő változó értékének megszüntetése dönt az iterációs utasítás megszüntetéséről.
  4. Ha a módszer nem vezet a végződési feltételhez, akkor végtelen rekurzióba lép. Másrészt, ha a vezérlőváltozó soha nem vezet a terminálértékhez, akkor az iterációs utasítás végtelenül ismétlődik.
  5. A végtelen rekurzió a rendszer összeomlásához vezethet, míg a végtelen iteráció CPU ciklusokat fogyaszt.
  6. A rekurziót mindig a módszerre alkalmazzák, míg az iterációt az utasításkészletre alkalmazzák.
  7. A rekurzió során létrehozott változókat a veremben tárolják, míg az iteráció nem igényel veremet.
  8. A rekurzió az ismételt függvény hívását eredményezi, míg az iterációnak nincs függvénye, amely felfelé hívja.
  9. A függvényhívás miatt a rekurzió végrehajtása lassabb, míg az iteráció végrehajtása gyorsabb.
  10. A rekurzió csökkenti a kód méretét, míg az iterációk hosszabbá teszik a kódot.

Következtetés:

A rekurzív funkció könnyen írható, de az iterációhoz képest nem teljesül jól, míg az iterációt nehéz írni, de teljesítményük jó a rekurzióhoz képest.

Top