Hogyan működik egy rekurzív függvény verem túlcsordulás az orosz

Itt van 2 funkciót. fő - a fő funkciója az alkalmazást, tény - a faktoriális függvény. Faktoriális számítjuk gyűrűs tényt hívó funkcióhoz. Valójában az első alkalommal hívják a fő, akkor amíg a funkció érv nem lesz 1, nevezi magát a csökkenés az érvelését 1. Röviden valahogy. Mellesleg az algoritmus nem érvek és ellenőrzi nem tudja kezelni érveket 1-nél kisebb - atom-22 augusztus 23 '15 at 13:39







Oké, és ha át azt a tényt, (2), megkapjuk, hogy a funkció nem lesz feleslegesen raboat n-1 = 1 -? User186578 augusztus 23 '15 at 13:43

@ User186578: miért ne? lesz. - Nick Volynkin ♦ augusztus 23 '15 at 13:44

A jövőben, amikor feltettem egy kérdést, részletesen leírja, amit megértett, és hogy - még nem, mit vártál, hogy mi történt helyette. Azt javaslom elolvasni: Hogyan kérdéseket feltenni. hogyan lehet létrehozni egy gyors, teljes és megbízható mintát. - Nick Volynkin ♦ augusztus 25 '15 at 05:15

Faktoriálisát egy természetes szám n - a termék minden egész szám 1-től N beleértve.

Faktoriális 1 értéke 1. Minden más esetben faktoriális (N) egyenlő faktoriális (N-1) * N.

Ebben a példában, a tény (int n) - ez egy rekurzív függvény, nevezi magát.

Például a program megtalálja a faktoriális 4.

Hogyan működik a rekurzív hívások száma:







Lehet, hogy világossá válik, ha átírjuk nagyon röviden

Tény () nevezi magát többször, minden alkalommal egy érv az 1-nél kisebb a kiváltott mindaddig, amíg ez nem okoz az érv értéke 1. Ebben az esetben, akkor visszatér 1. Különben visszaküldi az eredményt a termék n, amely visszaadja az a tény, (n - 1).

Mindez szinte pontosan megfelel a meghatározása faktoriális.

És ha egy rekurzív függvény tömböt r [] hallgatólagosan szervezett, mint a verem aktivációs függvény tény.

Ami a kiszámítására az a tény, (n) érték elegendő tudni, hogy a tény, (n - 1). akkor nyilván hatásos algoritmus egyszerű iteráció, ahol minden lépésben a ciklus, akkor kell szorozni a faktoriális a pultra ciklus lépéseit. Ugyanakkor ellenőrizze a megengedhetősége a bemeneti paraméter (faktoriális definiáljuk nem negatív egész), és a túlfolyó (azaz akár egy másik közbenső eredmény illeszkedik típusú változó).

Amennyiben hibát return false eredményt: túlcsordulás nulla és számos kisebb, mint nulla (érvénytelen argumentum is) egy negatív érv.

Válaszol augusztus 23 '15 at 13:43

Nélküli eladások rekurzió:

VÉGREHAJTÁSI rekurzió:

Ha jobban megnézed, észrevehető ismétlés kódot mindkét implementáció: num * (factorialRecurses (num - 1)); megfelel

A funkció meghív egy függvényt önmagában mindaddig, amíg eléri a nullát. Ha megnézzük a debugger, világossá válik, hogy a függvény hívási verem ebben az időben van töltve. Elegendő felidézni a verem szervezet. Funkció A -> funkció felhívja B -> C függvény hívások -> D funkció hívásokat, stb Csak abban az esetben, rekurzió, kiderül, hogy ugyanazt a funkciót nevezi magát ismételten. Aztán elérte a legtávolabbi pont - nulla stack fokozatosan csökken Ez eredményét adja vissza a függvény hívása, amíg befejeződik „megsemmisítés”.

A választ október 19-én 15:21




Kapcsolódó cikkek