Rekommenderas, 2024

Redaktionen

Skillnad mellan rekursion och iteration

Rekursion och iteration utförs upprepade gånger av uppsättningen instruktioner. Rekursion är när ett uttalande i en funktion kallas upprepade gånger. Iterationen är när en slinga gjordes upprepade gånger tills det styrande tillståndet blir falskt. Den primära skillnaden mellan rekursion och iteration är att en recursion är en process som alltid tillämpas på en funktion. Iterationen tillämpas på uppsättningen instruktioner som vi vill få upprepade gånger.

Jämförelsediagram

Basis för jämförelseRekursionIteration
GrundläggandeUttrycket i en kropp av funktion kallar funktionen själv.Tillåter att uppsättningen instruktioner utförs upprepade gånger.
FormateraI rekursiv funktion anges endast uppsägningstillstånd (basfall).Iteration inkluderar initialisering, villkor, utförande av uttalandet inom loop och uppdatering (steg och minskningar) kontrollvariabeln.
UppsägningEtt villkorligt uttalande ingår i funktionens kropp för att tvinga funktionen att återvända utan att återkopplingssamtal utförs.Repetitionsuppsättningen utförs upprepade gånger tills ett visst villkor är uppnått.
TillståndOm funktionen inte konvergerar till ett visst tillstånd (basfall) leder det till oändlig recursion.Om kontrollförhållandet i iterationsförklaringen aldrig blir falskt leder det till oändlig iteration.
Oändlig upprepningOändlig rekursion kan krascha systemet.Oändlig slinga använder CPU-cyklerna flera gånger.
AppliceradRekursion tillämpas alltid på funktioner.Iteration appliceras på iteration uttalanden eller "loopar".
StackStacken används för att lagra uppsättningen nya lokala variabler och parametrar varje gång funktionen heter.Används inte stapel.
Över huvudetRekursion har överhuvudtaget av upprepade funktionssamtal.Inget överhuvudtaget av upprepat funktionssamtal.
FartLångsam i körning.Snabb i körning.
Kodens storlekRekursion minskar kodens storlek.Iteration gör koden längre.

Definition av rekursion

C ++ tillåter en funktion att ringa sig inom sin kod. Det betyder att definitionen av funktionen har ett funktionssamtal till sig själv. Ibland kallas det också " cirkulär definition ". Den uppsättning lokala variabler och parametrar som används av funktionen skapas nyligen varje gång funktionen kallar sig och lagras högst upp i stapeln. Men varje gång en funktion kallar sig skapar den inte en ny kopia av den funktionen. Den rekursiva funktionen minskar inte signifikant kodens storlek och förbättrar inte ens minnesutnyttjandet, men det gör en del jämfört med iterationen.

För att avsluta rekursionen måste du inkludera ett valdeklaration i definitionen av funktionen för att tvinga funktionen att återvända utan att ge ett rekursivt samtal till sig själv. Frånvaron av valda uttalandet i definitionen av en rekursiv funktion kommer att låta funktionen i oändlig recursion en gång kallas.

Låt oss förstå rekursion med en funktion som kommer att återge numret i faktorn.

 int factorial (int num) {int svar; om (num == 1) {return 1; } annat {answer = factorial (num-1) * num; // rekursiv ringer} retur (svar); } 

I ovanstående kod visar uppfattningen i annan del rekursionen, eftersom uttalandet kallar funktionen factorial () där den är bosatt.

Definition av Iteration

Iteration är en process för att exekvera uppsättningen instruktioner upprepade gånger tills tillståndet i iterationsuppsättningen blir falskt. Iterationsförklaringen inkluderar initialiseringen, jämförelsen, utförandet av uttalandena i iterationsförklaringen och slutligen uppdateringen av kontrollvariabeln. Efter att kontrollvariabeln uppdaterats jämförs den igen, och processen upprepar sig, tills tillståndet i iterationsdeklarationen visar sig vara falskt. Iteration uttalandena är "för" loop, "while" loop, "do-while" -slinga.

I iterationsutrymmet används inte en stapel för att lagra variablerna. Följaktligen är utförandet av iterationsförklaringen snabbare jämfört med rekursiv funktion. Även iterationsfunktionen har inte överhuvudtaget för upprepad funktionskallning, vilket också gör dess utförande snabbare än rekursiv funktion. Iterationen avslutas när kontrolltillståndet blir falskt. Frånvaron av kontrollvillkor i iterationsuppsättning kan resultera i en oändlig slinga, eller det kan orsaka ett kompileringsfel.

Låt oss förstå iteration om ovanstående exempel.

 int factorial (int num) {int svar = 1; // behöver initialisering eftersom det kan innehålla ett skräpvärde före initieringen för (int t = 1; t> num; t ++) // iteration {answer = answer * (t); returnera (svar); }} 

I ovanstående kod returnerar funktionen fakulteten av numret med hjälp av iterationsförklaringen.

Viktiga skillnader mellan rekursion och efterbehandling

  1. Rekursion är när en metod i ett program upprepade gånger kallar sig medan iteration är när en uppsättning instruktioner i ett program exekveras flera gånger.
  2. En rekursiv metod innehåller uppsättning instruktioner, uppgift som kallar sig själv och ett uppsägningstillstånd medan iterationsdeklarationer innehåller initialisering, inkrement, villkor, uppsättning instruktion inom en slinga och en kontrollvariabel.
  3. Ett villkorligt uttalande beslutar att uppsägningen av rekursions- och kontrollvariabelns värde bestämmer uppsägningen av iterationsuppsättningen.
  4. Om metoden inte leder till uppsägningstillståndet går det till oändlig rekursion. Å andra sidan, om kontrollvariabeln aldrig leder till uppsägningsvärdet itereras iterationen oändligt.
  5. Oändlig rekursion kan leda till systemkrasch medan oändlig iteration förbrukar CPU-cykler.
  6. Rekursion tillämpas alltid på metod medan iteration tillämpas på uppsättning instruktioner.
  7. Variabler skapade under rekursion lagras på stapeln medan iteration inte kräver en stapel.
  8. Recursion orsakar att det går att ringa om upprepad funktion, medan iteration inte har en funktion som kallar overhead.
  9. På grund av funktionen kallas overhead utförande av rekursion är långsammare medan utförandet av iteration är snabbare.
  10. Rekursion minskar kodens storlek medan iterationer gör en kod längre.

Slutsats:

Den rekursiva funktionen är lätt att skriva, men de fungerar inte bra jämfört med iteration medan iterationen är svår att skriva men deras prestanda är bra jämfört med rekursion.

Top