slide1 n.
Download
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

Loading in 2 Seconds...

play fullscreen
1 / 85

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


  • 86 Views
  • Uploaded on

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.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'HIKGHB Németh Gábor LUF9NV Simon Attila' - emmett


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1

HÁZI FELADAT

HIKGHB

Németh Gábor

LUF9NV

Simon Attila

slide2

A programozás alapjai 1

10. előadás

Híradástechnikai Tanszék

slide4

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

slide5

4

6

2

7

5

3

1

Bináris fa bejárása

- inorder(bal gyerek – gyökér – jobb gyerek)rendezés

slide6

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

slide7

Bináris fa bejárása

typedef … adat; typedef stuct fa { adat a; struct fa *b,*j; } faelem; void feldolgoz (adat d) { … }

slide8

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); } }

slide9

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); } }

slide10

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); } }

slide11

Közvetlen rekurzió:

egy szegmens hivatkozik önmagára

slide12

Közvetett rekurzió:

szegmensek egymásra hivatkozásaiban kör van

slide14

A rekurzió célja:

A feladat méretének, vagy bonyolultságának csökkentése egy kezelhető szintig.

slide16

A rekurzió kritikus pontja:

A leállás feltételének teljesülését minden esetben biztosítani kell.

slide19

A rekurzió nagy előnyeaz elegancia

Néhány sorban,könnyen érthetőkódot írhatunk.

slide22

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

Akkor is használjuk,ha kevéssé hatékony,sőt pazarló.

slide24

Mikor ne használjunk rekurziót?

Ha az eredmény zárt alakban is előállítható.

slide25

Mikor ne használjunk rekurziót?

Ha az eredmény zárt alakban is előállítható.Pl.: számtani sorozat n-edik eleme

slide26

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ó.

slide27

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

slide29

A rekurzió és a ciklus kapcsolata

Minden ciklus megvalósítható rekurzióval.

slide30

A rekurzió és a ciklus kapcsolata

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

slide31

A

A

B

B

C

Vége

C

Vége

A

Minden ciklus megvalósítható rekurzióval.

slide33

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

A megoldásra rátalálninéha nem könnyű feladat!

slide34

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!

slide36

Egy könnyű probléma:

A Fibonacci számsorozat

slide37

Egy könnyű probléma:

  • A Fibonacci számsorozat
  • 1 1 2 3 5 8 13 21 34 55 …
slide38

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.
slide39

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);}

slide40

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;}

slide43

Egy nehéz probléma:

Hanoi tornyai

A MESE

slide44

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);}

slide46

Hanoi tornyai

Megvalósítás ciklussal

?

slide58

A páratlan lépéseket a legkisebb koronggal tesszük meg, mindig ugyanarra.

A párosadik lépések is egyértelműen meghatározottak:

- Tudjuk, hogy merre kell lépni.- Amivel léptünk, azzal nem léphetünk.- A legkisebb korongra nem rakodhatunk.

slide59

Hanoi tornyai

Megvalósítás ciklussal

- Ha n korong van, 2n-1 lépés kell.- Minden páratlanadik lépést a legkisebb koronggal kell megtenni.- Ha n páratlan, A-B-C-A sorrendben lép, ha n páros, A-C-B-A sorrendben lép.- Ha a következő lépést ugyanarra kell megtenni, oda kell lépni, ahonnan léptünk.- Ha a következő lépést ellenkező irányban kell megtenni, onnan kell lépni, ahonnan léptünk.

slide63

A nagy ÖTLET:CSAK EGY VEREM KELL!

Kalkulátor verem= ahol a kifejezések kiértékelése történik

Hívás verem= ahol a visszatérési címet tároljuk

Paraméter verem= ahol a paramétereket adjuk át

Ha már lúd, legyen kövér!Tároljuk itt a szegmensek belső változóit is!

slide68

Mit nem szükséges tudniaa függvényrőla fordítóprogramnak, hogy meg tudja hívni?

slide73

Függvény definíciója

<visszatérési érték típusa><függvény azonosítója>

(<formális paraméterek listája>)

<blokk>

slide75

Közvetlen rekurzió:

egy szegmens hivatkozik önmagára

slide77

Közvetett rekurzió:

szegmensek egymásra hivatkozásaiban kör van

slide79

Megoldás:

Válasszuk szét a függvénydeklarációjátésdefinícióját!

slide80

Függvény definíciója

<visszatérési érték típusa><függvény azonosítója>

(<formális paraméterek listája>)

<blokk>

slide81

Függvény deklarációja

<visszatérési érték típusa><függvény azonosítója>

(<paraméterek listája>)

;

slide82

Függvény deklarációja

<visszatérési érték típusa><függvény azonosítója>

(<paraméterek listája>)

;

A blokk helyén ; áll.

slide83

Függvény deklarációja

<visszatérési érték típusa><függvény azonosítója>

(<paraméterek listája>)

;

A paraméterek nevét a fordítóprogram nem veszi figyelembe, ezért elhagyható, vagy tetszőleges nevet használhatunk.

slide84

A függvény deklarációjaminden a híváshoz szükséges információt tartalmaz.

A függvény prototípusánakis nevezzük.

Másként a függvény fejléce.

slide85

A függvények tetszőleges sorrendben hívhatják egymást,ha a fejléceket kigyűjtjük,és a kód elejére írjuk.

Jó szokás egy fájlba írni,és #include direktívávalhivatkozni rá.