1 / 85

HIKGHB Németh Gábor LUF9NV Simon Attila

HÁZI FELADAT. HIKGHB Németh Gábor LUF9NV Simon Attila. A programozás al apjai 1. 10. előadás. Híradástechnikai Tanszék. Rekurzió. 1. 5. 2. 7. 6. 4. 3. Bináris fa bejárása - preorder (gyökér – bal gyerek – jobb gyerek) mentés - visszaállítás. 4. 6. 2. 7. 5. 3. 1.

emmett
Download Presentation

HIKGHB Németh Gábor LUF9NV Simon Attila

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. HÁZI FELADAT HIKGHB Németh Gábor LUF9NV Simon Attila

  2. A programozás alapjai 1 10. előadás Híradástechnikai Tanszék

  3. Rekurzió

  4. 1 5 2 7 6 4 3 Bináris fa bejárása - preorder(gyökér – bal gyerek – jobb gyerek) mentés - visszaállítás

  5. 4 6 2 7 5 3 1 Bináris fa bejárása - inorder(bal gyerek – gyökér – jobb gyerek)rendezés

  6. 7 6 3 5 4 2 1 Bináris fa bejárása - posztorder(bal gyerek – jobb gyerek – gyökér)képlet kiértékelése

  7. Bináris fa bejárása typedef … adat; typedef stuct fa { adat a; struct fa *b,*j; } faelem; void feldolgoz (adat d) { … }

  8. Bináris fa bejárása - preordervoid bejar(faelem *p) void bejar(faelem *p) { { if (p) feldolgoz(p->a); { if (p->b) bejar(p->b); feldolgoz(p->a); if (p->j) bejar(p->j); bejar(p->b); } bejar(p->j); } }

  9. Bináris fa bejárása - inordervoid bejar(faelem *p) void bejar(faelem *p) { { if (p) if (p->b) bejar(p->b); { feldolgoz(p->a); bejar(p->b); if (p->j) bejar(p->j); feldolgoz(p->a); } bejar(p->j); } }

  10. Bináris fa bejárása - posztordervoid bejar(faelem *p) void bejar(faelem *p) { { if (p) if (p->b) bejar(p->b); { if (p->j) bejar(p->j); bejar(p->b); feldolgoz(p->a); bejar(p->j); } feldolgoz(p->a); } }

  11. Közvetlen rekurzió: egy szegmens hivatkozik önmagára

  12. Közvetett rekurzió: szegmensek egymásra hivatkozásaiban kör van

  13. A rekurzió célja:

  14. A rekurzió célja: A feladat méretének, vagy bonyolultságának csökkentése egy kezelhető szintig.

  15. A rekurzió kritikus pontja:

  16. A rekurzió kritikus pontja: A leállás feltételének teljesülését minden esetben biztosítani kell.

  17. A rekurzió nagy előnye

  18. A rekurzió nagy előnyeaz elegancia

  19. A rekurzió nagy előnyeaz elegancia Néhány sorban,könnyen érthetőkódot írhatunk.

  20. A rekurzió nagy hátránya

  21. A rekurzió nagy hátrányaa csábítás

  22. A rekurzió nagy hátrányaa csábítás Akkor is használjuk,ha kevéssé hatékony,sőt pazarló.

  23. Mikor ne használjunk rekurziót?

  24. Mikor ne használjunk rekurziót? Ha az eredmény zárt alakban is előállítható.

  25. Mikor ne használjunk rekurziót? Ha az eredmény zárt alakban is előállítható.Pl.: számtani sorozat n-edik eleme

  26. Mikor ne használjunk rekurziót? Ha az eredmény zárt alakban is előállítható.Pl.: számtani sorozat n-edik eleme Ha a feladat ciklusszervezéssel iskönnyen megoldható.

  27. Mikor ne használjunk rekurziót? Ha az eredmény zárt alakban is előállítható.Pl.: számtani sorozat n-edik eleme Ha a feladat ciklusszervezéssel iskönnyen megoldható.Pl.: faktoriális számítás

  28. A rekurzió és a ciklus kapcsolata

  29. A rekurzió és a ciklus kapcsolata Minden ciklus megvalósítható rekurzióval.

  30. A rekurzió és a ciklus kapcsolata Minden ciklus megvalósítható rekurzióval. Minden rekurzió megvalósítható ciklussal és segédváltozókkal.

  31. A A B B C Vége C Vége A Minden ciklus megvalósítható rekurzióval.

  32. Minden rekurzió megvalósítható ciklussal és segédváltozókkal.

  33. Minden rekurzió megvalósítható ciklussal és segédváltozókkal. A megoldásra rátalálninéha nem könnyű feladat!

  34. Minden rekurzió megvalósítható ciklussal és segédváltozókkal. A megoldásra rátalálninéha nem könnyű feladat! Lássunk példát erre is, arra is!

  35. Egy könnyű probléma:

  36. Egy könnyű probléma: A Fibonacci számsorozat

  37. Egy könnyű probléma: • A Fibonacci számsorozat • 1 1 2 3 5 8 13 21 34 55 …

  38. Egy könnyű probléma: • A Fibonacci számsorozat • 1 1 2 3 5 8 13 21 34 55 … • A sorozat harmadik elemétől kezdveminden elem az előző kettő összege.

  39. A Fibonacci számsorozat Rekurzív megvalósítás fib(unsigned n){ if (n<2) return n; return fib(n-2) + fib(n-1);}

  40. A Fibonacci számsorozat Megvalósítás ciklussal fib(unsigned n){ int regi=0,uj=1; for(n--;n;n--) { uj+=regi; regi=uj-regi;} return uj;}

  41. Egy nehéz probléma:

  42. Egy nehéz probléma: Hanoi tornyai

  43. Egy nehéz probléma: Hanoi tornyai A MESE

  44. Hanoi tornyai Rekurzív megvalósítás void hanoi(unsigned hanyat, char honnan,char hova){char seged=3*′B′-honnan-hova;if (--hanyat) hanoi(hanyat,honnan,seged);printf(″%c %c\n″,honnan,hova);if (hanyat) hanoi(hanyat,seged,hova);}

  45. Hanoi tornyai Megvalósítás ciklussal ?

More Related