Rekursiooni ja iteratsiooni erinevus

Autor: Laura McKinney
Loomise Kuupäev: 1 Aprill 2021
Värskenduse Kuupäev: 4 Mai 2024
Anonim
If You Try to Fight These Tanks You’re Basically Dead
Videot: If You Try to Fight These Tanks You’re Basically Dead

Sisu


Rekursioon ja iteratsioon täidavad korduvalt juhiseid. Rekursioon on siis, kui funktsiooni avaldus kutsub ennast korduvalt. Iteratsioon toimub siis, kui silmus kordub, kuni kontrolltingimus muutub valeks. Esmane erinevus rekursiooni ja iteratsiooni vahel on see, et a rekursioon on protsess, mida rakendatakse alati funktsioonile. iteratsioon rakendatakse juhiste komplektile, mida soovime korduvalt täita.

  1. Võrdlusdiagramm
  2. Definitsioon
  3. Peamised erinevused
  4. Järeldus

Võrdlusdiagramm

Võrdluse alusRekursioonIteratsioon
PõhilineLause funktsiooni korpuses kutsub funktsiooni ise.Võimaldab juhiste komplekti korduvalt täita.
VormingRekursiivse funktsiooni korral on määratud ainult lõpetamise tingimus (põhijuhtum).Iteratsioon sisaldab initsialiseerimist, tingimust, avalduse täitmist ahelas ja juhtmuutuja värskendamist (suurendamine ja vähendamine).
LõpetamineFunktsiooni põhiosa on lisatud tingimuslik avaldus, mis sunnib funktsiooni naasma ilma rekursioonikõnet tegemata.Korratakse iteratsiooniavaldust, kuni teatud tingimus on saavutatud.
SeisundKui funktsioon ei lähe kokku mõne tingimusega, mida nimetatakse (põhijuhtum), viib see lõpmatu rekursioonini.Kui iteratsiooniavalduses esitatud kontrollitingimus ei muutu kunagi valeks, viib see lõpmatu iteratsioonini.
Lõpmatu kordusLõpmatu rekursioon võib süsteemi krahhi põhjustada.Lõpmatu ahel kasutab korduvalt protsessori tsükleid.
RakendatudRekursiooni rakendatakse alati funktsioonidele.Iteratsiooni rakendatakse iteratsiooniavaldustele või "silmustele".
KorstnatPinu kasutatakse uute kohalike muutujate ja parameetrite komplekti salvestamiseks iga kord, kui funktsiooni kutsutakse.Ei kasuta virna.
Üle peaRekursioon hõlmab korduvate funktsioonikõnede üldkulusid.Korduvate funktsioonide väljakutse puudub.
KiirusAeglane täitmine.Kiire täitmine.
Koodi suurusRekursioon vähendab koodi suurust.Itereerimine muudab koodi pikemaks.


Rekursiooni mõiste

C ++ võimaldab funktsioonil helistada enda koodi piires. See tähendab, et funktsiooni määratlus omab funktsiooni kutset iseendale. Mõnikord nimetatakse seda ka “ümmargune määratlus“. Funktsiooni kasutatavate kohalike muutujate ja parameetrite komplekt luuakse iga kord, kui funktsioon ise helistab, ja need salvestatakse virna ülaossa. Kuid iga kord, kui funktsioon ise helistab, ei loo see funktsioonist uut koopiat. Rekursiivne funktsioon ei vähenda koodi mahtu märkimisväärselt ega paranda isegi mälu kasutamist, kuid iteratsiooniga võrreldes teeb seda mõnevõrra.

Rekursiooni lõpetamiseks peate funktsiooni määratlusesse lisama valimislause, mis sunnib funktsiooni naasma, ilma et ta ise rekursiivset kõnet annaks. Valitud väite puudumine rekursiivse funktsiooni määratluses laseb funktsioonil kord helistada lõpmatu rekursiooni korral.


Mõistagem rekursiooni funktsiooniga, mis tagastab arvu faktori.

int faktoriaal (int num) {int vastus; if (num == 1) {tagasta 1; } else {vastus = faktoriaal (num-1) * num; // rekursiivne helistamine} tagasitulek (vastus); }

Ülaltoodud koodis näitab lause teises osas rekursiooni, kuna avaldus kutsub funktsiooni factorial (), milles see asub.

Iteratsiooni määratlus

Itereerimine on käskude komplekti korduv täitmine, kuni iteratsiooniavalduses esitatud tingimus muutub valeks. Iteratsiooniavaldus sisaldab iteratsiooniavalduses olevate avalduste initsialiseerimist, võrdlemist, täitmist ja lõpuks juhtmuutuja värskendamist. Pärast kontrollmuutuja värskendamist võrreldakse seda uuesti ja protsess kordub, kuni iteratsiooniavalduses esitatud tingimus osutub valeks. Iteratsioonilaused on „jaoks”, „samas”, „ja”, „tegemata”.

Iteratsiooniavalduses ei kasutata muutujate salvestamiseks pinu. Seega on iteratsiooniavalduse täitmine kiirem kui rekursiivne funktsioon. Isegi iteratsioonifunktsioonil puudub korduvate funktsioonide helistamine, mis muudab selle täitmise kiiremaks kui rekursiivne funktsioon. Iteratsioon lõpetatakse, kui kontrollitingimus muutub valeks. Juhtimistingimuste puudumine iteratsioonilauses võib põhjustada lõpmatu ahela või põhjustada kompileerimisvea.

Saame aru iteratsioonist ülaltoodud näite osas.

int faktoriaal (int num) {int vastus = 1; // vajab lähtestamist, kuna see võib sisaldada prügi väärtust enne selle lähtestamist (int t = 1; t> num; t ++) // iteratsioon {answer = answer * (t); tagasi (vastus); }}

Ülaltoodud koodi korral tagastab funktsioon numbri faktoriaal iteratsiooniavalduse abil.

  1. Rekursioon on see, kui mõni meetod programmis kutsub ennast korduvalt, iteratsioon on see, kui programmi juhiseid komplekti korduvalt täidetakse.
  2. Rekursiivne meetod sisaldab käskude komplekti, väljakutse iseennast ja lõpetamistingimusi, samas kui iteratsiooniavaldused sisaldavad initsialiseerimist, juurdekasvu, tingimust, käsu komplekti ahelas ja juhtmuutujat.
  3. Tingimuslik avaldus otsustab rekursiooni lõpetamise ja kontrollmuutuja väärtus otsustab iteratsiooniavalduse lõpetamise.
  4. Kui meetod ei vii lõpetamise tingimuse juurde, läheb see lõpmatu rekursioonini. Teisest küljest, kui juhtmuutuja ei vii kunagi lõppväärtuseni, itereerub iteratsiooniavaldus lõpmata.
  5. Lõpmatu rekursioon võib põhjustada süsteemi krahhi, samas kui lõpmatu iteratsioon kulutab protsessori tsükleid.
  6. Rekursiooni rakendatakse alati meetodile, iteratsiooni aga juhiste komplektile.
  7. Rekursiooni ajal loodud muutujad salvestatakse pinu, iteratsioon ei vaja pinu.
  8. Rekursioon põhjustab korduvate funktsioonide väljakutsumise üldkulusid, samas kui iteratsioonil puudub funktsioon, mis kutsub üles pea.
  9. Funktsioonikõnede tõttu on rekursiooni üldine täitmine aeglasem, samas kui iteratsiooni teostamine on kiirem.
  10. Rekursioon vähendab koodi mahtu, iteratsioonid muudavad koodi pikemaks.

Järeldus:

Rekursiivset funktsiooni on lihtne kirjutada, kuid need ei toimi iteratsiooniga võrreldes hästi, iteratsiooni on aga raske kirjutada, kuid nende rekursiooniga võrreldes on see hea.