Hogyan kell rekurzív függvényt tervezni? Hogyan kell debugolni?
Ha az a feladat, hogy "írjon egy rekurzív függvényt az alábbi problémára", akkor ennek hogyan kell nekiállni? Csak a tervezési elmélet érdekel, nem az, hogy egy konkrét példára mi a rekurzív megoldás, ezért nem írtam ki példát sem.
A kérdés másik fele, hogy ha adott egy rekurzív függvény, akkor azt hogyan tudom debugolni, hogy mit fog kiadni eredményként? Ha csak néhányszor hívja meg magát, akkor még oké, papíron levezetem szépen, ha mondjuk 100-szor hívja meg magát, mire eljut az eredményig, akkor ezt hogyan tudom kidebugolni?
Kérdező:
Ahogyan #4 említette, a kilépési feltételt kell kitalálnod. Ehhez mindig találni kell egy szélsőséges/speciális esetet (ciklusnál ez lenne a ciklusfeltétel). A szétválogatásnál ez az üres tömb (nincs mit szétválogatni = nem kell semmit csinálni), minden más esetben szét kell válogatni a tömb elemeit.
Ezt a vizsgálatot teszik általában a rekurzív függvény elejére (lásd #4-es programja). Ennek az az oka, hogy például üres is lehet az input tömböd (tehát maga a feladat inputja a/egy szélsőséges eset, nem pedig az X. rekurzió után jut el oda a program).
A speciális eseten kívül az általános/ismétlődő részt kell még kitalálni (ciklusnál ez lenne a ciklusmag).
Tehát a konkrét példádnál, azaz a szétválogatásnál:
SPECIÁLIS eset: üres az input tömb, "nem csinálsz semmit" (attól is függ, hogy mi a feladat, ha például az, hogy 2 másik tömbbe válogasd szét az inputot, akkor az eredmény 2 üres tömb lesz - mint #4 programjánál; de ha például az a feladat, hogy az input tömbben helyben cserélgesd ki az elemeket - elöl a párosok, hátul a páratlanok pl. - akkor nem kell semmit sem csinálni üres tömb esetén)
ÁLTALÁNOS eset: az input első elemét szétválogatod és a többi elemre meghívod rekurzívan a szétválogatás függvényét
@13:12 Csak kiegészítésképpen a közvetett rekurzióra:
3.1. Páros-e páros és páratlan függvény rekurzívan egymás hívása és sosem önmaga hívása nagyon jó példa rá.
Csak ki ne találd már hogy semmi se jó csak amit te hiszel, hogy csak te vagy az egyedüli hiteles forrás!
Igen jártam egyetemre régen, onnan van ismeretem többek között a rekurzióról is meg sok más "finomságról" is.
Egyébként nagyon jó heurisztikát ad a wikipedia, adott dologgal kapcsolatban hogy hogy is van az, a mentén el lehet indulni. Én nem a mentén indultam el, én fejből indultam el, az csak az volt amit legelőször megtaláltam reflektálva a hozzászólásra ami nem igaz.
Különben meg szabad idődbe kezdheted gyűjteni hogy mennyi dolog van rosszul írva a wiki-be és mennyi nem lehet strigulázni. Ha rosszul van akkor fel e van hívva rá a figyelem stb, de most ne menjünk ebbe bele, nem ide tartozik, már nagyon off topik.
A wikipédia az internetből, mint információs bázisból táplálkozik. Ami a wikin megtalálható, az az interneten is megtalálható és amennyire hiteles forrás, annyira hiteles a wikipédia is. A magyar nyelvű szócikkek nem ritkán az angol szócikk buta, suta, néha nevetésre ingerlő fordításai. Általánosan informálja azokat, akik erre részorulnak, de szakmaiságot elvárni azoktól az oldalaktól nem lehet, még akkor sem, ha egy-egy szócikket érzékelhetően kompetens ember írt meg, vagy ilyen ember munkájából merítettek.
Veled meg, hosszú lélegzetű, az a baj, hogy lépten nyomon belefűzöl a mondandódba olyasmit, ami butaság, és ezzel el is árulod, hogy laikus vagy. Nem gond az ha téved valaki, hiszen ez mindenkivel előfordul, de te úgy tévedsz, ahogy egy szakmabeli egyszerűen nem tudna.
Köszönöm a válaszokat! Megpróbálom megemészteni, amit írtatok. :D
A 2 pipás kollégának mondom, hogy húzzon innen máshova, mert úgy sem fogom szétidegeskedni magam a trollkodásán. Szoktam olvasni a kommentjeit a többi kérdés alatt és úgy látom, hogy itt is csak az észosztás megy számára.
Elfogtam egy üzenetet, azt hiszem ez mindent elmond...
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!