Kezdőoldal » Számítástechnika » Programozás » Mi a különbség a rekúrzív és...

Mi a különbség a rekúrzív és az iteratív függvény között?

Figyelt kérdés

2017. okt. 7. 15:22
 1/4 anonim ***** válasza:
76%

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.

2017. okt. 7. 16:45
Hasznos számodra ez a válasz?
 2/4 anonim ***** válasza:
És tudom, hogy a példám hibás. Nem is volt célom, hogy helyes példát adjak, a lényegére akartam rávilágítani.
2017. okt. 7. 16:47
Hasznos számodra ez a válasz?
 3/4 anonim ***** válasza:
100%

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.

2017. okt. 7. 16:56
Hasznos számodra ez a válasz?
 4/4 anonim ***** válasza:
100%
Ez van, ha tévézek gépelés helyett.. megelőznek.. kb ugyanazzal a példával :D
2017. okt. 7. 16:59
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!