Kezdőoldal » Számítástechnika » Programozás » Valaki leírná, elmagyarázná...

Valaki leírná, elmagyarázná ezt a rekurzív függvényes dolgot?

Figyelt kérdés

Pl.:

int faktorialis(int n)

{

if(n <= 1)

return 1;

return n * faktorialis(n-1);

}


Én ott elakadok, hogy vagy így,vagy úgy tér vissza a fgv,de "egymásba ágyazva".

Hogy tud visszatérni egy fgv többször?

Ha meg n=4,akkor hol tárolódik a többi "return" eredmény?


2014. okt. 5. 21:40
 1/6 anonim ***** válasza:
57%

Először meghívódik n=4-el, majd 3-al, majd 2-vel, majd 1-el. Ekkor n=1-re megtudjuk a választ -> n=2-es visszatér 2-vel -> n=3-as visszatér 6-al -> n=4-es visszatér 24-el.


Olyan mint a sugdolózós játék, oda-vissza közlekedik az adat ugyanazon függvény különböző példányai között.

2014. okt. 5. 21:48
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:
57%

Oké.


legyen n=2 akkor az ugye nagyobb mint 1. Így n az 2 * faktorialis(n-1). De a függvény n-1et kap azaz egy. De ha újra futtatod, akkor már return 1-et ad. Így kapsz 2*1-et.


Ha 3mal futtatod, akkor (3 * faktorialis(3-1))*faktorialis(2-1) Ugye a zárójel felbontható így kapsz 3*2*1-et.

2014. okt. 5. 21:48
Hasznos számodra ez a válasz?
 3/6 anonim ***** válasza:
53%
A faktorialis(n-1) kifejezes "kiertekelesekor" a fuggveny epp futo peldanyaban "megall az ido", megegyszer lefut a fuggveny, megkapjuk az eredmenyt es ez alapjan fog folytatodni a korabb elinditott "peldany".
2014. okt. 5. 21:50
Hasznos számodra ez a válasz?
 4/6 anonim ***** válasza:
57%
2014. okt. 5. 21:51
Hasznos számodra ez a válasz?
 5/6 anonim ***** válasza:
57%

> Hogy tud visszatérni egy fgv többször?


A függvényhíváshoz szükséges paraméterek a veremben tárolódnak.

Több hívás esetén a verem mérete megnő, ezért számítanak instabilnak a rekurzív függvények


n=4 esetén a következő értékek kerülnek be a verembe: 4,3,2,1, ahol a legutolsó n=1 hívásra a visszatérési érték 1. A rekurziót "visszagörgetve" a veremben lévő értékek összeszorzódnak. Így lesz az eredmény 24.


A rekurzív faktoriális egy állatorvosi ló, egyetlen lehetséges haszna, hogy megtanítja a rekurzív függvényhívást. Gyakorlatban fa bejárásnál szokás használni rekurzív függvényeket.

2014. okt. 6. 14:15
Hasznos számodra ez a válasz?
 6/6 anonim ***** válasza:
0%

A következő megoldás nem használ rekurziót, ráadásul konstans idejű:


template <int n>

struct factorial {

  enum { value = n * factorial<n - 1>::value };

};


template <>

struct factorial<0> {

  enum { value = 1 };

};


Próba:

factorial<0>::value; //eredménye 1 lesz.

factorial<4>::value; //eredménye 24 lesz.

2014. okt. 6. 16:52
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!