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