Mi a különbség a rekúrzív és az iteratív függvény között?
Az, hogy a rekurzív függvény mindig önmagát hívja meg, míg az iteratív függvény valamilyen ciklussal oldja meg ugyanazt a feladatot.
[C#]
public static uint RecursiveFactorial(uint n) {
.. if (n <= 1)
.. .. return 1;
..
.. return n * RecursiveFactorial(n-1);
}
[C#]
public static uint IterativeFactorial(uint n) {
.. uint Result = 1;
..
.. while (n > 1) {
.. .. Result *= n;
.. .. n--;
.. }
..
.. return Result;
}
Két fontos dolgot kell megemlíteni:
1) Minden rekurzív függvény megírható iteratívként.
2) A rekurzív függvények - mivel önmagukat hívják - minden egyes hívás során növelik a call stack (hívási lánc) méretét. Amelynek mérete viszont véges. Ha a call stack megtelt, de te még egyszer ráhívsz, akkor stack overflow miatt hibára fog futni a programod.
Iteratív:
int FactorialIterative(int n)
{
int sum = 1;
if (n <= 1) return sum;
while (n > 1)
{
sum *= n;
n--;
}
return sum;
}
Rekurzív:
int FactorialRecursive(int n)
{
if (n <= 1) return 1;
return n * FactorialRecursive(n - 1);
}
Iteratív magában oldja meg a problémát, míg a rekurzív
az ismétlődéshez saját magát hívja meg.
Rekurzív kódja egyszerűbb, viszont mind processzoridőben,
mint stackben nagyságrendekkel több erőforrást igényel.
Én pl akkor írok rekurzívat, ha csak pointerekkel dolgo-
zok, pl mappalistánál, ha az adott elem mappa, akkor
arra is ráhívom a mappalistát. Viszont ha változókat
adnék át, amik másolva kerülnek a stackbe, egy sima
C:\Windows összegyűjtése is megenné a stacket.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!