|
Szerző |
Üzenet |
Hannibal
Moderátor
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 6486 Tartózkodási hely: Bonyhád - BP
|
Dester írta: Zsoca jól leírta. A faktoriális megoldható FOR ciklussal is, de rekurzívan is. Egyébként a Hanoi tornyainak a talán legismertebb megoldása tipikusan rekurzív probléma (persze van nem rekurzív megoldása is). A faktoriális függvény rekurzióval pl. Pascal (Delphi) szintaktikával: Kód: Function Fakt(N: Integer): Integer; Begin If N=1 Then Result:=1 Else Result:=N*Fakt(N-1); End; Meghívása pl. WriteLn(Fakt(10)); Látható, hogy itt is van feltétel, mert egyébként végtelen ciklust írunk. Ezen egyszerűen végig tudod gondolni, hogy mit is csinál a függvény.
Igen, tanár is valami ilyesmit írkált. De itt amit nem értek: úgye n kap egy értéket, pl 10, akkor mivel nem egyenlő 1-gyel, ezért csökkenti mindig n értékét. De, amikor egy lesz n, akkor a fügvény értéke is egy lesz (result:=1). Innen hogyan jut el odáig, hogy a függvény a megfelelő értéket kapja?
szerk: Hupszi, kicsit elcsúsztam az írással és a quoten belül írtam
A hozzászólást 1 alkalommal szerkesztették, utoljára Hannibal szer. jan. 25, 2006 15:50-kor.
|
szer. jan. 25, 2006 9:17 |
|
|
T68m
a fórum lelke
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 12729 Tartózkodási hely: FLF
|
és a fentiekből következik, hogy minden rekurzív algoritmus kibonható nem rekurzívá.
|
szer. jan. 25, 2006 1:47 |
|
|
Dester
Moderátor
Csatlakozott: kedd nov. 02, 2004 17:38 Hozzászólások: 5120 Tartózkodási hely: Budapest/Szeged
|
Zsoca jól leírta.
A faktoriális megoldható FOR ciklussal is, de rekurzívan is. Egyébként a Hanoi tornyainak a talán legismertebb megoldása tipikusan rekurzív probléma (persze van nem rekurzív megoldása is).
A faktoriális függvény rekurzióval pl. Pascal (Delphi) szintaktikával:
Kód: Function Fakt(N: Integer): Integer; Begin If N=1 Then Result:=1 Else Result:=N*Fakt(N-1); End;
Meghívása pl.
WriteLn(Fakt(10));
Látható, hogy itt is van feltétel, mert egyébként végtelen ciklust írunk. Ezen egyszerűen végig tudod gondolni, hogy mit is csinál a függvény.
|
kedd jan. 24, 2006 23:18 |
|
|
Zsoca-M5
gyémánt tag
Csatlakozott: pén. márc. 26, 2004 9:12 Hozzászólások: 2711 Tartózkodási hely: Budapest, Érd
|
Ahogy az előttem szóló is leírta a lényeg: rekurzív az az eljárás, mely képes önmagát meghívni.
Ha tanultatok már bináris keresést, akkor már láttál rá példát is hogy mire jó.
A lényege, hogy rekurzív eljárást csak VÉGES számú rekurzióra szabad írni (különben egyenlő 1 végtelen ciklussal)!
Tehát egy rekurzív eljárásban mindig van egy feltétel vizsgálat, aminek teljesülése vagy nem teljesülése esetén hívja meg önmagát. (Ez kerüli el a végtelen kört).
Még egy fontos dolog, amikor egy rekurzív eljárás meghívja önmagát (és az megint...megint...megint...), majd egyszercsak nem hívja újra magát hanem lefut, akkor a végrehajtás ott folytatódik, ahol a rekurzív hívás történt, majd még egy szinttel feljebb majd még egy szinttel feljebb...egészen addig míg a legfelső szintre ér, és kilép az eljárásból!
Próbáltam a fentebbi részt példákkal illusztrálni, de igazából csak akkor fogod látni, ha írsz például egy primitív fakturiális számító eljárást, és debug módban TRACE INTO-val megnézegeted hogyan megy végig rajta!!
Üdv,
Zsoca-M5
|
kedd jan. 24, 2006 22:04 |
|
|
kRoy
arany tag
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 146
|
Rekurzió esete akkor áll fenn, ha egy függvény önmagát hívja meg. Ennek természetesen csak bizonyos feltételek mellett szabad megtörténnie egyébként hamar elfogynak bizonyos erőforrások (stack pl.).
Pl. fájlrendszerben egy adott könyvtártól kezdve minden bejegyzést szeretnél megjeleníteni:
Kód: File startLocation = new File("/"); printFiles(startLocation); . . . void printFiles(File startLoc) { File[] filesInLoc = findAllFilesIn(startLoc); for (int idx = 0; idx < filesInLoc.length; idx++) { print(filesInLoc[idx].getName()); if (filesInLoc[idx].isDirectory()) { printFiles(filesInLoc[idx]); } } }
A fenti kódban adott pont összes fájlbejegyzésén végigmegyünk, kiírjuk a nevüket, majd ha alkönyvtárral találkozunk, akkor abban is ugyanez történik. Ennyi.
|
kedd jan. 24, 2006 15:16 |
|
|
Hannibal
Moderátor
Csatlakozott: szer. márc. 24, 2004 13:43 Hozzászólások: 6486 Tartózkodási hely: Bonyhád - BP
|
Rekurzió -- mi a rák az?
Üdv Mindenki!
Lenne egy olyan kérdésem, hogy mi az isten az a rekurzó meg a rekurzív programok stb.
Ezt azért kérdezem, mert suliba elvileg ezt tanuljuk, de még érthetően senki nem tudott róla egy mukkot se mondani nekem, se az osztálynak.
Hálás lennék, ha valaki leírná részletesen hogy mi is ez, lehetőleg példákkal szemléltetve.
Köszi szépen!
Hannibal
|
kedd jan. 24, 2006 15:00 |
|
|
Ki van itt |
Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 2 vendég |
|
Nem nyithatsz témákat ebben a fórumban. Nem válaszolhatsz egy témára ebben a fórumban. Nem szerkesztheted a hozzászólásaidat ebben a fórumban. Nem törölheted a hozzászólásaidat ebben a fórumban.
|
|
|