Aanbevolen, 2020

Editor'S Choice

Verschil tussen recursie en iteratie

Recursie en iteratie voeren beide herhaaldelijk de instructies uit. Recursie is wanneer een statement in een functie zichzelf herhaaldelijk noemt. De iteratie is wanneer een lus herhaaldelijk wordt uitgevoerd totdat de controleconditie onwaar wordt. Het belangrijkste verschil tussen recursie en iteratie is dat een recursie een proces is dat altijd wordt toegepast op een functie. De iteratie wordt toegepast op de set instructies die we herhaaldelijk uitgevoerd willen krijgen.

Vergelijkingstabel

Basis voor vergelijkingHerhalingherhaling
basis-De verklaring in een geheel van functies roept de functie zelf aan.Hiermee kan de set instructies herhaaldelijk worden uitgevoerd.
FormaatIn de recursieve functie is alleen de terminatietoestand (basissituatie) opgegeven.Iteratie omvat initialisatie, conditie, uitvoering van statement binnen loop en update (incrementen en decrements) van de controlevariabele.
BeëindigingEen voorwaardelijke verklaring is opgenomen in de hoofdtekst van de functie om de functie te dwingen terug te keren zonder dat een recursie-aanroep wordt uitgevoerd.De iteratieverklaring wordt herhaaldelijk uitgevoerd totdat een bepaalde voorwaarde is bereikt.
StaatAls de functie niet convergeert naar een bepaalde voorwaarde (basisscenario), leidt dit tot oneindige recursie.Als de besturingsvoorwaarde in de iteratieverklaring nooit onwaar wordt, leidt dit tot oneindige iteratie.
Oneindige herhalingOneindige recursie kan het systeem doen crashen.Oneindige lus gebruikt CPU-cycli herhaaldelijk.
ToegepastRecursie wordt altijd toegepast op functies.Iteratie wordt toegepast op iteratieverklaringen of "loops".
stackDe stack wordt gebruikt om de set nieuwe lokale variabelen en parameters op te slaan telkens wanneer de functie wordt aangeroepen.Gebruikt geen stack.
boven het hoofdRecursie bezit de overhead van herhaalde functieaanroepen.Geen overhead van herhaalde functieaanroep.
SnelheidTraag in uitvoering.Snel in uitvoering.
Grootte van codeRecursie vermindert de grootte van de code.Iteratie maakt de code langer.

Definitie van recursie

Met C ++ kan een functie zichzelf binnen zijn code noemen. Dat betekent dat de definitie van de functie een functieaanroep naar zichzelf heeft. Soms wordt het ook " circulaire definitie " genoemd. De set lokale variabelen en parameters die door de functie worden gebruikt, worden elke keer gemaakt wanneer de functie zichzelf roept en worden opgeslagen aan de bovenkant van de stapel. Maar elke keer wanneer een functie zichzelf aanroept, maakt deze geen nieuwe kopie van die functie. De recursieve functie verkleint de grootte van de code niet aanzienlijk en verbetert zelfs het geheugengebruik niet, maar doet dit in vergelijking met de iteratie.

Om de recursie te beëindigen, moet u een select statement opnemen in de definitie van de functie om de functie te dwingen terug te keren zonder een recursieve aanroep naar zichzelf te geven. De afwezigheid van de select-instructie in de definitie van een recursieve functie laat de functie in oneindige recursie eenmaal genoemd.

Laten we recursie begrijpen met een functie die de faculteit van het getal teruggeeft.

 int-factor (int num) {int-antwoord; if (num == 1) {return 1; } else {answer = factorial (num-1) * num; // recursief bellen} terug (antwoord); } 

In de bovenstaande code geeft de instructie in else deel de recursie weer, zoals de instructie de functie factorie () noemt waarin deze zich bevindt.

Definitie van iteratie

Iteratie is een proces waarbij de set instructies herhaaldelijk wordt uitgevoerd totdat de voorwaarde in de iteratieverklaring onwaar wordt. De iteratieverklaring omvat de initialisatie, vergelijking, uitvoering van de instructies in de iteratie-instructie en tenslotte het bijwerken van de besturingsvariabele. Nadat de besturingsvariabele is bijgewerkt, wordt deze opnieuw vergeleken en wordt het proces herhaald totdat de voorwaarde in iteratieverklaring onjuist is. De iteratie-instructies zijn "voor" lus, "while" loop, "do-while" -lus.

De iteratieverklaring gebruikt geen stack om de variabelen op te slaan. Vandaar dat de uitvoering van de iteratie-instructie sneller is in vergelijking met de recursieve functie. Zelfs de iteratiefunctie heeft niet de overhead van herhaalde functieaanroepen, waardoor de uitvoering ervan ook sneller is dan de recursieve functie. De iteratie wordt beëindigd wanneer de controlevoorwaarde onwaar wordt. De afwezigheid van een controleconditie in iteratie instructie kan resulteren in een oneindige lus, of het kan een compilatiefout veroorzaken.

Laten we de iteratie van het bovenstaande voorbeeld begrijpen.

 int factorie (int num) {int answer = 1; // moet worden geïnitialiseerd omdat het een afvalwaarde kan bevatten vóór de initialisatie voor (int t = 1; t> num; t ++) // iteration {antwoord = antwoord * (t); terugkeer (antwoord); }} 

In bovenstaande code retourneert de functie de faculteit van het getal met behulp van iteratie-instructie.

Belangrijkste verschillen tussen recursie en iteratie

  1. Recursie is wanneer een methode in een programma zichzelf herhaaldelijk roept, terwijl iteratie is wanneer een reeks instructies in een programma herhaaldelijk wordt uitgevoerd.
  2. Een recursieve methode bevat een reeks instructies, een instructie die zichzelf oproept en een beëindigingsvoorwaarde, terwijl iteratieverklaringen initialisatie, increment, voorwaarde, instructieset binnen een lus en een controlevariabele bevatten.
  3. Een voorwaardelijke verklaring beslist dat de beëindiging van de waarde van recursie en besturingsvariabele de beëindiging van de iteratieverklaring bepalen.
  4. Als de methode niet leidt tot de beëindigingsvoorwaarde, gaat deze naar oneindige recursie. Aan de andere kant, als de besturingsvariabele nooit leidt tot de beëindigingswaarde, itereert de iteratie-instructie oneindig.
  5. Oneindige recursie kan leiden tot een systeemcrash, terwijl oneindige iteratie CPU-cycli verbruikt.
  6. Recursie wordt altijd toegepast op de methode, terwijl iteratie wordt toegepast op instructieset.
  7. Variabelen gemaakt tijdens recursie worden opgeslagen op stapel, terwijl iteratie geen stapel vereist.
  8. Recursie veroorzaakt de overhead van herhaalde functieaanroep terwijl iteratie geen functie heeft die overhead belt.
  9. Vanwege functie-aanroep boven de hoofd uitvoering van recursie is langzamer terwijl uitvoering van iteratie sneller is.
  10. Recursie vermindert de grootte van code terwijl iteraties een code langer maken.

Conclusie:

De recursieve functie is gemakkelijk te schrijven, maar ze presteren niet goed in vergelijking met iteratie, terwijl de iteratie moeilijk is om te schrijven, maar hun prestaties zijn goed in vergelijking met recursie.

Top