Forum » Programiranje » A se komu sanja kaj o rekurziji v c++
A se komu sanja kaj o rekurziji v c++
jeti ::
rekurzija pomeni, da nek podprogram kliče samega sebe, in sicer z malo spremenjenimi parametri.
Bom dal za primer izracun fakulete (n!):
int fakulteta(int n) {
if (n<0) ERROR; //n mora biti nenegativen
if (n==0)
return 1; //po definiciji je 0! = 1
else
return (n*fakulteta(n-1)); //rekurzivni klic samega sebe
}
kaj zadeva naredi? poklice samo sebe, vsakic z za 1 manjsim stevilom.
recimo da pri klicu funkcije za argument das stevilo 5:
fuknkcija bo vrnila 5*fakulteta(5-1), torej 5*fakulteta(4)
seveda je treba izracunati, koliko je fakulteta 4, zato se bo izvedla ena kopija funkcije fakulteta, le da z argumentom 4.
Vrnila bo 4*fakulteta(3). fakulteta(3) bo vrnila 3*fakulteta(2)...
...potem se bo poklicala fakulteta(0), ki bo vrnila 1.
zato bo funkcija fakulteta(1) vrnila 1*fakulteta(0) = 1
rezultat se bo uporabil pri prejsnjem klicu fakulteta(2), ki bo vrnil 2*fakulteta(1) = 2*1 =1
in tako naprej, najbolj prvi klic fakulteta(5) bo vrnil 5*fakulteta(4) = 5*24 = 120.
Se pravi, program poklice samega sebe in nekje drugje izvede celoten postopek (samega sebe) z malo drugacnimi argumenti, potem pa rezultat tega postopka uporabi pri sebi. Tako je klic "fakulteta(5)" poklical samega sebe fakulteta(4), ki je izracunal neko vrednost, nato pa je "fakulteta(5)" to vrednost uporabil pri sebi.
Tko nekak.
Bom dal za primer izracun fakulete (n!):
int fakulteta(int n) {
if (n<0) ERROR; //n mora biti nenegativen
if (n==0)
return 1; //po definiciji je 0! = 1
else
return (n*fakulteta(n-1)); //rekurzivni klic samega sebe
}
kaj zadeva naredi? poklice samo sebe, vsakic z za 1 manjsim stevilom.
recimo da pri klicu funkcije za argument das stevilo 5:
fuknkcija bo vrnila 5*fakulteta(5-1), torej 5*fakulteta(4)
seveda je treba izracunati, koliko je fakulteta 4, zato se bo izvedla ena kopija funkcije fakulteta, le da z argumentom 4.
Vrnila bo 4*fakulteta(3). fakulteta(3) bo vrnila 3*fakulteta(2)...
...potem se bo poklicala fakulteta(0), ki bo vrnila 1.
zato bo funkcija fakulteta(1) vrnila 1*fakulteta(0) = 1
rezultat se bo uporabil pri prejsnjem klicu fakulteta(2), ki bo vrnil 2*fakulteta(1) = 2*1 =1
in tako naprej, najbolj prvi klic fakulteta(5) bo vrnil 5*fakulteta(4) = 5*24 = 120.
Se pravi, program poklice samega sebe in nekje drugje izvede celoten postopek (samega sebe) z malo drugacnimi argumenti, potem pa rezultat tega postopka uporabi pri sebi. Tako je klic "fakulteta(5)" poklical samega sebe fakulteta(4), ki je izracunal neko vrednost, nato pa je "fakulteta(5)" to vrednost uporabil pri sebi.
Tko nekak.
Bolje vrabec v roki kot (p)tič v riti!
Včasih je bil http://come.to/jeti
Včasih je bil http://come.to/jeti
Zgodovina sprememb…
- spremenil: jeti ()
[kren] ::
rekurzija je lahko ob nepravilnem ravnanju tud izjemno nevarna zadeva, ni tezko tko obesit tvojega programa. tko da malo pazi glede tega..
freejack ::
Če še enega pošlješ na freejack_inc@yahoo.com, ti bom mucho hvaležen,.. :) 10x (obrazložitev prošnje; študent FRI,..dovolj povedano,..)
darh ::
mazgonar.. ko boš že ravno pošiljal... še v moj mailbox butni enga xbite@exonium.net
Excuses are useless! Results are priceless!
mazgonar ::
LP!
Vidim, da vas je več zato sem ga dal tuki gor http://www.sunrise.si/razno/c++.zip . Xbite, tebi sem ga pe že poslal, remember me?
Lp vsem!
Vidim, da vas je več zato sem ga dal tuki gor http://www.sunrise.si/razno/c++.zip . Xbite, tebi sem ga pe že poslal, remember me?
Lp vsem!
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C#] Domača naloga za faksOddelek: Programiranje | 2095 (1719) | Spura |
» | Naloga iz Putka - UPMOddelek: Programiranje | 2217 (1553) | NejcSSD |
» | C# (strani: 1 2 )Oddelek: Programiranje | 12049 (8884) | Ericssony |
» | C# je mozna referenca do int izven funkcije (direkt v classu torej)Oddelek: Programiranje | 1609 (1423) | TopCat |
» | [Java] Kako filtrirati, katera števila lahko vpišeš?Oddelek: Programiranje | 2079 (1781) | fiction |