Sammenligningstabel
Grundlag for sammenligning | rekursion | iteration |
---|---|---|
Grundlæggende | Opgørelsen i en funktionskrop kalder selve funktionen. | Tillader, at sæt af instruktioner gentages gentagne gange. |
Format | I rekursiv funktion er der kun angivet opsigelsesbetingelser (basiscase). | Iteration omfatter initialisering, betingelse, udførelse af erklæring inden for loop og opdatering (trin og aftagelser) kontrolvariablen. |
Afslutning | En betinget erklæring er inkluderet i funktionens krop for at tvinge funktionen til at vende tilbage uden at rekursionsopkald udføres. | Iteration erklæringen gentages gentagne gange, indtil en bestemt tilstand er nået. |
Tilstand | Hvis funktionen ikke konvergerer til en tilstand kaldet (basiscase), fører det til uendelig rekursion. | Hvis kontrolltilstanden i iterationsopgørelsen aldrig bliver falsk, fører det til uendelig iteration. |
Uendelig gentagelse | Uendelig rekursion kan ødelægge systemet. | Uendelig sløjfe bruger gentagne gange CPU-cyklusser. |
Anvendt | Rekursion anvendes altid til funktioner. | Iteration anvendes til iterations udsagn eller "loops". |
Stak | Stakken bruges til at gemme sæt nye lokale variabler og parametre hver gang funktionen hedder. | Bruger ikke stak. |
Overhead | Rekursion besidder overhead af gentagne funktionsopkald. | Ingen overhead af gentagne funktionsopkald. |
Hastighed | Langsom i udførelse. | Hurtig i fuldførelse. |
Størrelse af kode | Rekursion reducerer kodenes størrelse. | Iteration gør koden længere. |
Definition af rekursion
C + + tillader en funktion at kalde sig inden for sin kode. Det betyder, at definitionen af funktionen har et funktionsopkald til sig selv. Nogle gange hedder det også " cirkulær definition ". Sættet af lokale variabler og parametre, der bruges af funktionen, oprettes nyligt hver gang funktionen kalder sig og gemmes øverst på stakken. Men hver gang en funktion kalder sig, skaber den ikke en ny kopi af den funktion. Den rekursive funktion reducerer ikke signifikant størrelsen af koden og forbedrer ikke engang hukommelsesudnyttelsen, men det gør nogle i forhold til iterationen.
For at afslutte rekursionen skal du inkludere en valgt sætning i definitionen af funktionen for at tvinge funktionen til at returnere uden at give et rekursivt opkald til sig selv. Fraværet af den valgte sætning i definitionen af en rekursiv funktion vil lade funktionen være i uendelig rekursion en gang kaldet.
Lad os forstå rekursion med en funktion, som vil returnere nummerets faktorial.
int factorial (int num) {int svar; hvis (num == 1) {return 1; } ellers {answer = factorial (num-1) * num; // rekursiv opkald} retur (svar); }
I ovennævnte kode viser sætningen i andet del rekursionen, idet sætningen kalder funktionfaktor (), hvori den ligger.
Definition af Iteration
Iteration er en proces til at udføre sæt af instruktioner gentagne gange, indtil tilstanden i iterationsopgørelsen bliver falsk. Iterationsopgørelsen omfatter initialisering, sammenligning, udførelse af udsagnene inde i iterationsopgørelsen og endelig opdatering af kontrolvariablen. Når kontrolvariablen er opdateret, sammenlignes den igen, og processen gentages selv, indtil tilstanden i iterationsopgørelsen viser sig at være falsk. Iteration erklæringer er "for" loop, "while" loop, "do-while" loop.
Iterationsopgørelsen bruger ikke en stak til at gemme variablerne. Derfor er udførelsen af iterationsopgørelsen hurtigere i forhold til rekursiv funktion. Selv iterationsfunktionen har ikke overhead af gentagne funktionsopkald, som også gør udførelsen hurtigere end rekursiv funktion. Iterationen afsluttes, når kontroltilstanden bliver falsk. Fraværet af kontrolbetingelser i iterationsopgørelsen kan resultere i et uendeligt sløjfe, eller det kan medføre en kompileringsfejl.
Lad os forstå iteration om ovenstående eksempel.
int factorial (int num) {int svar = 1; // skal initialiseres, fordi den kan indeholde en affaldsværdi inden initialiseringen for (int t = 1; t> num; t ++) // iteration {answer = answer * (t); returnere (svar); }}
I ovennævnte kode returnerer funktionen fakultetet af tallet ved hjælp af iterationsopgørelse.
Nøgleforskelle mellem rekursion og iteration
- Rekursion er, når en metode i et program gentagne gange kalder sig selv, mens iteration er, når et sæt instruktioner i et program gentages gentagne gange.
- En rekursiv metode indeholder sæt af instruktioner, erklæring, der kalder sig selv og en opsigelsesbetingelse, mens iterationsopgørelser indeholder initialisering, inkrement, tilstand, sæt instruktion inden for en loop og en kontrolvariabel.
- En betinget erklæring bestemmer, at opsigelsen af rekursions- og kontrolvariablerens værdi bestemmer opsigelsen af iterationsopgørelsen.
- Hvis metoden ikke fører til opsigelsesbetingelsen, går den til uendelig rekursion. På den anden side, hvis kontrolvariablen aldrig fører til opsigelsesværdien, gentager iterationsopgørelsen uendeligt.
- Uendelig rekursion kan føre til systemnedbrud, mens uendelig iteration bruger CPU-cyklusser.
- Rekursion anvendes altid til metode, mens iteration anvendes til sæt instruktion.
- Variabler oprettet under rekursion gemmes på stakken, mens iteration ikke kræver en stak.
- Rekursion forårsager overhead af gentagen funktion, der kalder, mens iteration ikke har en funktion, der kalder overhead.
- På grund af funktionen kaldes overhead udførelse af rekursion er langsommere, mens udførelsen af iteration er hurtigere.
- Rekursion reducerer størrelsen af kode, mens iterationer gør en kode længere.
Konklusion:
Den rekursive funktion er let at skrive, men de fungerer ikke godt i forhold til iteration, mens iterationen er svær at skrive, men deres præstation er god i forhold til rekursion.