HIKGHB Németh Gábor LUF9NV Simon Attila - PowerPoint PPT Presentation

emmett
slide1 n.
Skip this Video
Loading SlideShow in 5 Seconds..
HIKGHB Németh Gábor LUF9NV Simon Attila PowerPoint Presentation
Download Presentation
HIKGHB Németh Gábor LUF9NV Simon Attila

play fullscreen
1 / 85
Download Presentation
95 Views
Download Presentation

HIKGHB Németh Gábor LUF9NV Simon Attila

- - - - - - - - - - - - - - - - - - - - - - - - - - - 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 ?