Sammenligningstabel
Grunnlag for sammenligning | rekursjon | køyring |
---|---|---|
grunn~~POS=TRUNC | Uttalelsen i en funksjonsfunksjon kaller selve funksjonen. | Tillater at instruksjonene gjentas gjentatte ganger. |
Format | I rekursiv funksjon er bare oppsigelsestilstand (basis sak) spesifisert. | Iterasjon inkluderer initialisering, tilstand, utførelse av setning i loop og oppdatering (inkrementer og reduksjoner) kontrollvariabelen. |
Avslutning | En betinget erklæring er inkludert i funksjonens kropp for å tvinge funksjonen til å returnere uten at tilbakekallingsanrop blir utført. | Iteration-setningen utføres gjentatte ganger til en viss tilstand er nådd. |
Tilstand | Hvis funksjonen ikke konvergerer til en tilstand som kalles (grunnleggende tilfelle), fører den til uendelig rekursjon. | Hvis kontrolltilstanden i iterasjonsoppgaven aldri blir falsk, fører det til uendelig iterasjon. |
Uendelig Repetisjon | Uendelig rekursjon kan krasje systemet. | Uendelig sløyfe bruker CPU-sykluser gjentatte ganger. |
Anvendt | Rekursjon brukes alltid til funksjoner. | Iterasjon er brukt på iterasjonssagn eller "løkker". |
Stable | Stakken brukes til å lagre settet med nye lokale variabler og parametere hver gang funksjonen kalles. | Bruker ikke stabel. |
overhead | Rekursjon besitter overhead av gjentatte funksjonssamtaler. | Ingen overhead for gjentatt funksjonssamtale. |
Hastighet | Sakte i utførelse. | Rask i kjøring. |
Størrelse på kode | Rekursjon reduserer størrelsen på koden. | Iterasjon gjør koden lenger. |
Definisjon av rekursjon
C + + tillater en funksjon å kalle seg i sin kode. Det betyr at definisjonen av funksjonen har et funksjonsanrop til seg selv. Noen ganger kalles det også " sirkulærdefinisjon ". Settet av lokale variabler og parametere som brukes av funksjonen, er nylig opprettet hver gang funksjonen kaller seg og er lagret øverst på stakken. Men hver gang en funksjon kaller seg, oppretter det ikke en ny kopi av den funksjonen. Den rekursive funksjonen reduserer ikke signifikant størrelsen på koden og forbedrer ikke engang minneutnyttelsen, men det gjør noe i forhold til iterasjonen.
For å avslutte rekursjonen må du inkludere en valgt setning i definisjonen av funksjonen for å tvinge funksjonen til å returnere uten å gi et rekursivt anrop til seg selv. Fraværet av valgt setning i definisjonen av en rekursiv funksjon vil la funksjonen i uendelig rekursjon en gang kalt.
La oss forstå rekursjon med en funksjon som vil returnere faktorial av nummeret.
int factorial (int num) {int svar; hvis (num == 1) {return 1; } ellers {answer = factorial (num-1) * num; // rekursiv ringer} retur (svar); }
I overkoden viser setningen i annen del rekursjonen, da setningen kaller funksjonaliteten () der den ligger.
Definisjon av Iterasjon
Iterasjon er en prosess for å utføre settet med instruksjoner gjentatte ganger til tilstanden i iterasjonsoppstillingen blir feil. Iteration-setningen inkluderer initialisering, sammenligning, utførelse av uttalelsene i iterasjonsoppstillingen og endelig oppdatering av kontrollvariabelen. Etter at kontrollvariabelen er oppdatert sammenlignes den igjen, og prosessen gjentar seg selv til tilstanden i iterasjonsoppgaven viser seg å være feil. Iterasjonene er "for" loop, "while" loop, "do-while" loop.
Iteration-setningen bruker ikke en stabel for å lagre variablene. Derfor er utførelsen av iterasjonsoppgaven raskere sammenlignet med rekursiv funksjon. Selv iterasjonsfunksjonen har ikke overhead av gjentatt funksjonssamtaler som også gjør utførelsen raskere enn rekursiv funksjon. Iterasjonen avsluttes når kontrolltilstanden blir falsk. Fraværet av kontrolltilstand i iterasjonsoppgaven kan resultere i en uendelig sløyfe, eller det kan føre til en kompileringsfeil.
La oss forstå iterasjon om ovenstående eksempel.
int factorial (int num) {int answer = 1; // trenger initialisering fordi det kan inneholde søppelverdi før initieringen for (int t = 1; t> num; t ++) // iterasjon {svar = svar * (t); returnere (svar); }}
I overkoden returnerer funksjonen faktorial av tallet ved bruk av iterasjonserklæring.
Viktige forskjeller mellom rekursjon og gjentagelse
- Rekursjon er når en metode i et program kalles gjentatte ganger, mens iterasjon er når et sett med instruksjoner i et program gjentas gjentatte ganger.
- En rekursiv metode inneholder sett med instruksjoner, setning som kaller seg, og en termineringskondisjon, mens iterasjonserklæringer inneholder initialisering, inkrement, tilstand, sett med instruksjon i en loop og en kontrollvariabel.
- Et betinget utsagn bestemmer avslutningen av rekursjon og kontrollvariabelenes verdi bestemmer avslutningen av iterasjonsoppstillingen.
- Hvis metoden ikke fører til termineringskriteriet, går det til uendelig rekursjon. På den annen side, hvis kontrollvariabelen aldri fører til termineringsverdien, blir iterasjonssetningen uendelig.
- Uendelig rekursjon kan føre til systemkrasj, mens uendelig iterasjon bruker CPU-sykluser.
- Rekursjon brukes alltid til metode mens iterasjon brukes på sett av instruksjon.
- Variabler opprettet under rekursjon lagres i stabelen mens iterasjon ikke krever en stabel.
- Rekursjon forårsaker at overhead av gjentatt funksjon ringer mens iterasjonen ikke har en funksjon som ringer overhead.
- På grunn av funksjonen kalles overhead kjøring av rekursjon er tregere mens utførelse av iterasjon er raskere.
- Rekursjon reduserer størrelsen på kode mens iterasjoner gjør en kode lenger.
Konklusjon:
Den rekursive funksjonen er enkel å skrive, men de fungerer ikke bra i forhold til iterasjon mens iterasjonen er vanskelig å skrive, men deres ytelse er god i forhold til rekursjon.