Verschil tussen recursie en herhaling

Schrijver: Laura McKinney
Datum Van Creatie: 1 April 2021
Updatedatum: 4 Kunnen 2024
Anonim
De recursieve formule van een getallenrij - Rijen en veranderingen (vwo A) - WiskundeAcademie
Video: De recursieve formule van een getallenrij - Rijen en veranderingen (vwo A) - WiskundeAcademie

Inhoud


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

  1. Vergelijkingstabel
  2. Definitie
  3. Belangrijkste verschillen
  4. Gevolgtrekking

Vergelijkingstabel

Basis voor vergelijkingHerhalingherhaling
basis-De uitspraak in een verzameling functies noemt de functie zelf.Hiermee kan de set instructies herhaaldelijk worden uitgevoerd.
Ontwerp, stijlIn de recursieve functie is alleen de beëindigingstoestand (basisgeval) opgegeven.Iteratie omvat initialisatie, voorwaarde, uitvoering van instructie in lus en update (incrementen en afnames) van de besturingsvariabele.
BeëindigingEen voorwaardelijke verklaring is opgenomen in de hoofdtekst van de functie om de functie te dwingen terug te keren zonder dat een recursieaanroep wordt uitgevoerd.De iteratieverklaring wordt herhaaldelijk uitgevoerd totdat een bepaalde voorwaarde is bereikt.
StaatAls de functie niet convergeert naar een voorwaarde (base case), leidt dit tot oneindige recursie.Als de controleconditie in de iteratieverklaring nooit vals wordt, leidt dit tot oneindige iteratie.
Oneindige herhalingOneindige recursie kan het systeem laten crashen.Oneindige lus maakt herhaaldelijk gebruik van CPU-cycli.
ToegepastRecursie wordt altijd toegepast op functies.Iteratie wordt toegepast op iteratie-instructies of "lussen".
stackDe stapel wordt gebruikt om de set nieuwe lokale variabelen en parameters op te slaan telkens wanneer de functie wordt aangeroepen.Gebruikt geen stapel.
boven het hoofdRecursie bezit de overhead van herhaalde functieaanroepen.Geen overhead van herhaalde functieaanroep.
SnelheidTraag in uitvoering.Snel in uitvoering.
Grootte van codeRecursie verkleint de code.Iteratie maakt de code langer.


Definitie van recursie

C ++ staat een functie toe zichzelf binnen zijn code aan te roepen. Dat betekent dat de definitie van de functie een functieaanroep naar zichzelf bezit. Soms wordt het ook 'circulaire definitie“. De set lokale variabelen en parameters die door de functie worden gebruikt, worden telkens opnieuw gemaakt wanneer de functie zichzelf aanroept en worden boven aan de stapel opgeslagen. Maar telkens wanneer een functie zichzelf aanroept, wordt er geen nieuwe kopie van die functie gemaakt. De recursieve functie vermindert de grootte van de code niet significant en verbetert zelfs het geheugengebruik niet, maar doet dit wel 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 zichzelf een recursieve aanroep te geven. Door de afwezigheid van de select-opdracht in de definitie van een recursieve functie wordt de functie in oneindige recursie eenmaal aangeroepen.


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

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

In bovenstaande code toont de instructie in het andere gedeelte de recursie, omdat de instructie de functie factorial () aanroept 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 iteratieverklaring en ten slotte het bijwerken van de besturingsvariabele. Nadat de besturingsvariabele is bijgewerkt, wordt deze opnieuw vergeleken en herhaalt het proces zich totdat de voorwaarde in de iteratieverklaring onjuist blijkt te zijn. De iteratieverklaringen zijn "voor" lus, "terwijl" lus, "do-while" lus.

De iteratieverklaring gebruikt geen stapel om de variabelen op te slaan. Daarom is de uitvoering van de iteratieverklaring sneller in vergelijking met de recursieve functie. Zelfs de iteratiefunctie heeft niet de overhead van herhaalde functieaanroepen die de uitvoering ervan ook sneller maken dan de recursieve functie. De iteratie wordt beëindigd wanneer de besturingsvoorwaarde onwaar wordt. Het ontbreken van een controleconditie in de iteratieverklaring kan resulteren in een oneindige lus of kan een compilatiefout veroorzaken.

Laten we iteratie met betrekking tot het bovenstaande voorbeeld begrijpen.

int factorial (int num) {int antwoord = 1; // moet worden geïnitialiseerd omdat het een afvalwaarde kan bevatten voordat het wordt geïnitialiseerd voor (int t = 1; t> num; t ++) // iteratie {answer = answer * (t); terugkeer (antwoord); }}

In bovenstaande code retourneert de functie de faculteit van het getal met behulp van de iteratieverklaring.

  1. Recursie is wanneer een methode in een programma zichzelf herhaaldelijk aanroept, terwijl iteratie is wanneer een set instructies in een programma herhaaldelijk wordt uitgevoerd.
  2. Een recursieve methode bevat een reeks instructies, een instructie die zichzelf aanroept en een beëindigingsvoorwaarde, terwijl iteratieverklaringen initialisatie, increment, voorwaarde, een reeks instructies binnen een lus en een besturingsvariabele bevatten.
  3. Een voorwaardelijke verklaring bepaalt de beëindiging van de recursie en de waarde van de besturingsvariabele bepaalt de beëindiging van de iteratieverklaring.
  4. Als de methode niet leidt tot de beëindigingstoestand, treedt deze in oneindige recursie in. Aan de andere kant, als de besturingsvariabele nooit tot de beëindigingswaarde leidt, itereert de iteratieverklaring oneindig.
  5. Oneindige recursie kan leiden tot systeemcrash, terwijl oneindige iteratie CPU-cycli verbruikt.
  6. Recursie wordt altijd toegepast op methode, terwijl iteratie wordt toegepast op set instructies.
  7. Variabelen die tijdens de recursie zijn gemaakt, worden op de stapel opgeslagen, terwijl iteratie geen stapel vereist.
  8. Recursie veroorzaakt de overhead van herhaalde functieaanroepen terwijl iteratie geen functie heeft die overhead aanroept.
  9. Als gevolg van de functie aanroepen is de uitvoering van recursie langzamer, terwijl de uitvoering van iteratie sneller is.
  10. Recursie vermindert de code, terwijl iteraties een code langer maken.

Gevolgtrekking:

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