Anbefalet, 2024

Redaktørens Valg

Forskel mellem rekursion og iteration

Rekursion og iteration udfører gentagne gange sæt af instruktioner. Rekursion er, når en sætning i en funktion kalder sig gentagne gange. Iterationen er, når en loop gentages gentagne gange, indtil den styrende tilstand bliver falsk. Den primære forskel mellem rekursion og iteration er, at det er en rekursion, der er en proces, der altid anvendes til en funktion. Iterationen anvendes på det sæt instruktioner, som vi gerne vil få gentagne gange udført.

Sammenligningstabel

Grundlag for sammenligningrekursioniteration
GrundlæggendeOpgørelsen i en funktionskrop kalder selve funktionen.Tillader, at sæt af instruktioner gentages gentagne gange.
FormatI 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.
AfslutningEn 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.
TilstandHvis 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 gentagelseUendelig rekursion kan ødelægge systemet.Uendelig sløjfe bruger gentagne gange CPU-cyklusser.
AnvendtRekursion anvendes altid til funktioner.Iteration anvendes til iterations udsagn eller "loops".
StakStakken bruges til at gemme sæt nye lokale variabler og parametre hver gang funktionen hedder.Bruger ikke stak.
OverheadRekursion besidder overhead af gentagne funktionsopkald.Ingen overhead af gentagne funktionsopkald.
HastighedLangsom i udførelse.Hurtig i fuldførelse.
Størrelse af kodeRekursion 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

  1. 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.
  2. 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.
  3. En betinget erklæring bestemmer, at opsigelsen af ​​rekursions- og kontrolvariablerens værdi bestemmer opsigelsen af ​​iterationsopgørelsen.
  4. 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.
  5. Uendelig rekursion kan føre til systemnedbrud, mens uendelig iteration bruger CPU-cyklusser.
  6. Rekursion anvendes altid til metode, mens iteration anvendes til sæt instruktion.
  7. Variabler oprettet under rekursion gemmes på stakken, mens iteration ikke kræver en stak.
  8. Rekursion forårsager overhead af gentagen funktion, der kalder, mens iteration ikke har en funktion, der kalder overhead.
  9. På grund af funktionen kaldes overhead udførelse af rekursion er langsommere, mens udførelsen af ​​iteration er hurtigere.
  10. 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.

Top