programozás i. - 9. eloadás...

73
Programoz´ as I. 9. el˝ oad´ as Rekurzi´ o Sergy´ an Szabolcs [email protected] ´ Obudai Egyetem Neumann J´ anos Informatikai Kar Alkalmazott Informatikai Int´ ezet 2014. november 3. Sergy´ an (OE NIK AII) Programoz´ as I. 2014. november 3. 1 / 79

Upload: others

Post on 25-Jan-2020

7 views

Category:

Documents


1 download

TRANSCRIPT

Programozas I.9. eloadasRekurzio

Sergyan [email protected]

Obudai EgyetemNeumann Janos Informatikai KarAlkalmazott Informatikai Intezet

2014. november 3.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 1 / 79

Tartalom

1 Faktorialis

2 Fibonacci sorozat

3 Hatvanyozas

4 Hanoi tornyai

5 Sorozatszamıtas rekurzıv megvalosıtasa

6 Linearis kereses rekurzıv megvalosıtasa

7 Megszamlalas rekurzıv megvalosıtasa

8 Maximumkivalasztas rekurzıv megvalosıtasa

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 2 / 79

Tartalom

1 Faktorialis

2 Fibonacci sorozat

3 Hatvanyozas

4 Hanoi tornyai

5 Sorozatszamıtas rekurzıv megvalosıtasa

6 Linearis kereses rekurzıv megvalosıtasa

7 Megszamlalas rekurzıv megvalosıtasa

8 Maximumkivalasztas rekurzıv megvalosıtasa

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 3 / 79

Faktorialis

Matematikai definıcio

Az N ∈ N faktorialisa (jeloles: N!) alatt az elso N darab pozitıv termeszetes szamszorzatat ertjuk, N = 0 eseten pedig 1-et.

N! =

1, ha N = 0,N∏i=1

i , ha N ≥ 1.

Megvalosıtas a Sorozatszamıtas tetellel

Bemenet: N − egesz (termeszetes szam)Kimenet: ert ek − egesz

fuggveny FaktorialisIteratıv(N)ert ek ← 1ciklus i ← 2-tol N-ig

ert ek ← ert ek · iciklus vegevissza ert ek

fuggveny vege

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 4 / 79

Faktorialis

Faktorialis rekurzıv definıcioja

N! =

{1, ha N = 0

N · (N − 1)!, ha N ≥ 1

Rekurzıv definıcio osszetevoiA rekurzıv definıcionak ket resze van:

Alapeset (itt most az N = 0 eset)

Indukcios lepes: visszavezetjuk a problemat kisebb szamok esetere.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 5 / 79

Faktorialis

Pszeudokod

Bemenet: N − egesz (termeszetes szam)Kimenet: N faktorialisa

fuggveny FaktorialisRekurzıv(N)ha N = 0 akkor

vissza 1kulonben

vissza N · FaktorialisRekurzıv(N − 1)elagazas vege

fuggveny vege

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 6 / 79

Faktorialis

Futasi idoRekurzıv algoritmusok eseten altalaban azt vizsgaljuk, hogy hany darab(rekurzıv) fuggvenyhıvas tortenik.

Az N faktorialisanak kiszamıtasahoz N + 1 darab fuggvenyhıvas szukseges.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 8 / 79

Rekurzio megvalosıtasa

ProblemakUgyanabbol a fuggvenybol egyszerre tobb is fut?

Elozo peldaban a FaktorialisRekurzıv fuggvenybol egyszerre 5 is futott.

A fuggvenyen beluli lokalis valtozok erteke felulırodik?

Elozo peldaban honnan lehet tudni, hogy N erteke eppen mennyi?

Megoldas

Minden meghıvott fuggveny mas, csak a nevuk azonos.

A memoriaban eltaroljuk, hogy honnan hıvtunk egy fuggveny, majd ide lehetvisszaterni kesobb.

A lokalis valtozok minden egyes fuggvenyben kulon-kulon letrejonnek.

Azonos nevu, de kulonbozo valtozokrol van szo, hiszen a fuggvenyek iskulonbozoek.

Az ezen celra fenntartott memoria tulcsordulhat tul sok fuggvenyhıvas eseten.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 9 / 79

Tartalom

1 Faktorialis

2 Fibonacci sorozat

3 Hatvanyozas

4 Hanoi tornyai

5 Sorozatszamıtas rekurzıv megvalosıtasa

6 Linearis kereses rekurzıv megvalosıtasa

7 Megszamlalas rekurzıv megvalosıtasa

8 Maximumkivalasztas rekurzıv megvalosıtasa

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 10 / 79

Fibonacci sorozat

Nyulak szaporodasanak vizsgalata

Fibonacci a nyulak szaporodasat vizsgalta, es a kovetkezoket tapasztalta:

Minden nyulpar - amikor szaporodik -, akkor ket utoddal, azaz egy ujnyulparral jarul hozza a nepesseghez.

A nyulak a szuletesuket kovetoen ket egymas utani idopontban szaporodnak.

Vizsgaljuk, hogy adott idopontban hany uj nyulpar szuletik.

Matematikai leıras

Jelolje Fib(N), hogy az N-edik szaporodaskor hany uj nyulpar szuletik.

Kezdetben van egy nyulpar: Fib(0) = 1

Kovetkezo szaporodaskor ez a par szaporodik: Fib(1) = 1

Minden mas szaporodaskor az elozo es az azt megelozo szaporodaskorszuletett nyulak jarulnak hozza a szaporodashoz (megpedig egy-egynyulparral). Tehat: Fib(N) = Fib(N − 1) + Fib(N − 2)

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 11 / 79

Fibonacci sorozat

PszeudokodBemenet: N − egeszKimenet: N-edik Fibonacci szam

fuggveny FibonacciRekurzıv(N)ha N ≤ 1 akkor

vissza 1kulonben

vissza FibonacciRekurzıv(N − 2) + FibonacciRekurzıv(N − 1)elagazas vege

fuggveny vege

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 12 / 79

Fibonacci sorozat

A rekurzıv hıvasi fa

F (5)

F (3)

F (1) F (2)

F (0) F (1)

F (4)

F (2)

F (0) F (1)

F (3)

F (1) F (2)

F (0) F (1)

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 13 / 79

Fibonacci sorozat

Futasi ido

Jelolje T (N) az N-edik Fibonacci szam kiszamıtasahoz szuksegesfuggvenyhıvasok szamat.

T (0) = 1

T (1) = 1

T (2) = 1 + T (0) + T (1) = 1 + 1 + 1 = 3

T (3) = 1 + T (1) + T (2) = 1 + 1 + 3 = 5

T (4) = 1 + T (2) + T (3) = 1 + 3 + 5 = 9

T (5) = 1 + T (3) + T (4) = 1 + 5 + 9 = 15

...

T (N) = 1 + T (N − 2) + T (N − 1) ≈ 2N

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 14 / 79

Fibonacci sorozat

Iteratıv megvalosıtas

Bemenet: N − egeszKimenet: aktualis − egesz

fuggveny FibonacciIteratıv(N)aktualis ← 1el oz o← 1ciklus i ← 1-tol (N − 1)-ig

atmeneti ← aktualis + el oz oel oz o← aktualisaktualis ← atmeneti

ciklus vegevissza aktualis

fuggveny vege

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 15 / 79

Tartalom

1 Faktorialis

2 Fibonacci sorozat

3 Hatvanyozas

4 Hanoi tornyai

5 Sorozatszamıtas rekurzıv megvalosıtasa

6 Linearis kereses rekurzıv megvalosıtasa

7 Megszamlalas rekurzıv megvalosıtasa

8 Maximumkivalasztas rekurzıv megvalosıtasa

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 16 / 79

Hatvanyozas

Iteratıv megvalosıtas (sorozatszamıtas tetel)

Bemenet: a− szam, N − egeszKimenet: ert ek − szam

fuggveny HatvanyIteratıv(a,N)ert ek ← aciklus i ← 2-tol N-ig

ert ek ← ert ek · aciklus vegevissza ert ek

fuggveny vege

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 17 / 79

Hatvanyozas

Rekurzıv otlet

210 = 2 · 29 = 2 ·(2 · 28

)= . . .

aN =

{a, ha N = 1

a · aN−1, ha N > 1

Rekurzıv megvalosıtas

Bemenet: a− szam, N − egeszKimenet: aN erteke

fuggveny HatvanyRekurzıv(a,N)ha N = 1 akkor

vissza akulonben

vissza a ·HatvanyRekurzıv(a, N − 1)elagazas vege

fuggveny vege

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 18 / 79

Hatvanyozas

Gyorsabb algoritmus otlete

a10 = a5 · a5 =

=(a · a2 · a2

)·(a · a2 · a2

)=

=(a ·(a1 · a1

)·(a1 · a1

))·(a ·(a1 · a1

)·(a1 · a1

))

aN =

a, ha N = 1,

aN2 · a N

2 , ha N paros,

a · a N−12 · a N−1

2 , ha N > 1 es N paratlan.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 19 / 79

Hatvanyozas

PszeudokodBemenet: a− szam, N − egeszKimenet: aN erteke

fuggveny HatvanyFelezo(a,N)ha N = 1 akkor

vissza akulonben

ha N paros akkorseg ed ← HatvanyFelezo

(a, N

2

)vissza seg ed · seg ed

kulonbenseg ed ← HatvanyFelezo

(a, N−1

2

)vissza a · seg ed · seg ed

elagazas vegeelagazas vege

fuggveny vege

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 20 / 79

Hatvanyozas

Futasi idoHanyszor lehet az N erteket felezni?

Ez dlog2 Ne-szer lehetseges.

A futasi ido aranyos log2 N-nel, azaz az algoritmus futasi ideje O (logN)-es.

20 40 60 80 100

0

20

40

60

80

100

n

T(n

)

O(log n)O(n)

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 22 / 79

Tartalom

1 Faktorialis

2 Fibonacci sorozat

3 Hatvanyozas

4 Hanoi tornyai

5 Sorozatszamıtas rekurzıv megvalosıtasa

6 Linearis kereses rekurzıv megvalosıtasa

7 Megszamlalas rekurzıv megvalosıtasa

8 Maximumkivalasztas rekurzıv megvalosıtasa

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 23 / 79

Hanoi tornyai

FeladatAz egyik szelso rudrol at kell pakolni a korongokat a masik szelso rudra.

Segıtsegul a kozepso rud is hasznalhato.

Egyszerre egyetlen korong mozgathato.

Csak felul levo korongot lehet mozgatni egyik rudrol a masikra.

Egy korong nem rakhato nala kisebb meretu korongra.

5

4

3

2

1

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 24 / 79

Hanoi tornyai – 1 Korong

1

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 25 / 79

Hanoi tornyai – 1 Korong

1

Mozgatott korong 1 rudrol 3 rudra.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 26 / 79

Hanoi tornyai – 1 Korong

1

OK

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 27 / 79

Hanoi tornyai – 2 Korong

2

1

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 28 / 79

Hanoi tornyai – 2 Korong

2 1

Mozgatott korong 1 rudrol 2 rudra.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 29 / 79

Hanoi tornyai – 2 Korong

1 2

Mozgatott korong 1 rudrol 3 rudra.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 30 / 79

Hanoi tornyai – 2 Korong

2

1

Mozgatott korong 2 rudrol 3 rudra.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 31 / 79

Hanoi tornyai – 2 Korong

2

1

OK

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 32 / 79

Hanoi tornyai – 3 Korong

3

2

1

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 33 / 79

Hanoi tornyai – 3 Korong

3

2

1

Mozgatott korong 1 rudrol 3 rudra.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 34 / 79

Hanoi tornyai – 3 Korong

3 2 1

Mozgatott korong 1 rudrol 2 rudra.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 35 / 79

Hanoi tornyai – 3 Korong

3 2

1

Mozgatott korong 3 rudrol 2 rudra.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 36 / 79

Hanoi tornyai – 3 Korong

2

1

3

Mozgatott korong 1 rudrol 3 rudra.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 37 / 79

Hanoi tornyai – 3 Korong

1 2 3

Mozgatott korong 2 rudrol 1 rudra.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 38 / 79

Hanoi tornyai – 3 Korong

1 3

2

Mozgatott korong 2 rudrol 3 rudra.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 39 / 79

Hanoi tornyai – 3 Korong

3

2

1

Mozgatott korong 1 rudrol 3 rudra.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 40 / 79

Hanoi tornyai – 3 Korong

3

2

1

OK

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 41 / 79

Hanoi tornyai – 4 Korong

4

3

2

1

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 42 / 79

Hanoi tornyai – 4 Korong

4

3

2

1

Mozgatott korong 1 rudrol 2 rudra.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 43 / 79

Hanoi tornyai – 4 Korong

4

3

1 2

Mozgatott korong 1 rudrol 3 rudra.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 44 / 79

Hanoi tornyai – 4 Korong

4

3

2

1

Mozgatott korong 2 rudrol 3 rudra.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 45 / 79

Hanoi tornyai – 4 Korong

4 3 2

1

Mozgatott korong 1 rudrol 2 rudra.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 46 / 79

Hanoi tornyai – 4 Korong

4

1

3 2

Mozgatott korong 3 rudrol 1 rudra.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 47 / 79

Hanoi tornyai – 4 Korong

4

1

3

2

Mozgatott korong 3 rudrol 2 rudra.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 48 / 79

Hanoi tornyai – 4 Korong

4 3

2

1

Mozgatott korong 1 rudrol 2 rudra.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 49 / 79

Hanoi tornyai – 4 Korong

3

2

1

4

Mozgatott korong 1 rudrol 3 rudra.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 50 / 79

Hanoi tornyai – 4 Korong

3

2

4

1

Mozgatott korong 2 rudrol 3 rudra.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 51 / 79

Hanoi tornyai – 4 Korong

2 3 4

1

Mozgatott korong 2 rudrol 1 rudra.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 52 / 79

Hanoi tornyai – 4 Korong

2

1

3 4

Mozgatott korong 3 rudrol 1 rudra.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 53 / 79

Hanoi tornyai – 4 Korong

2

1

4

3

Mozgatott korong 2 rudrol 3 rudra.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 54 / 79

Hanoi tornyai – 4 Korong

2 1 4

3

Mozgatott korong 1 rudrol 2 rudra.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 55 / 79

Hanoi tornyai – 4 Korong

1 4

3

2

Mozgatott korong 1 rudrol 3 rudra.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 56 / 79

Hanoi tornyai – 4 Korong

4

3

2

1

Mozgatott korong 2 rudrol 3 rudra.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 57 / 79

Hanoi tornyai – 4 Korong

4

3

2

1OK

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 58 / 79

Hanoi tornyai – 5 Korong

5

4

3

2

1 ?

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 59 / 79

Hanoi tornyai

Megoldasi otlet

Ha N − 1 korongot at tudnank mozgatni a kozepso rudra, akkor az N-edikkorong ezutan mar atteheto a jobbszelso rudra, majd a kozepso rudrol kell azN − 1 korongot a jobbszelsore tenni.

Ez egy rekurzıv gondolat!

A rekurzio biztos leall, mert a legkisebb korong mindig felul van, esbarhonnan barhova mozgathato.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 60 / 79

Hanoi tornyai

PszeudokodBemenet: N − egesz, forras− rud, cel− rud, seged− rud

eljaras Hanoi(N, forras, cel, seged)ha N = 1 akkor

Mozgat(1, forras, cel)kulonben

Hanoi(N − 1, forras, seged, cel)Mozgat(N, forras, cel)Hanoi(N − 1, seged, cel, forras)

elagazas vegeeljaras vege

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 61 / 79

Hanoi tornyai

Negy korong athelyezesenek hıvasi faja es a szukseges mozgatasok

Hanoi(4, A, C, B)

Hanoi(3, B, C, A)

Hanoi(2, A, C, B)

Hanoi(1, B, C, A) 1 : B → C

Hanoi(1, A, B, C) 1 : A → B

2 : A → C

Hanoi(2, B, A, C)

Hanoi(1, C, A, B) 1 : C → A

Hanoi(1, B, C, A) 1 : B → C

2 : B → A

3 : B → C

Hanoi(3, A, B, C)

Hanoi(2, C, B, A)

Hanoi(1, A, B, C) 1 : A → B

Hanoi(1, C, A, B) 1 : C → A

2 : C → B

Hanoi(2, A, C, B)

Hanoi(1, B, C, A) 1 : B → C

Hanoi(1, A, B, C) 1 : A → B

2 : A → C

3 : A → B

4 : A → C

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 62 / 79

Hanoi tornyai

Futasi ido

Jelolje T (N) korong atmozgatasahoz szukseges fuggvenyhıvasok szamat.

T (1) = 1

T (2) = 1 + 2 · T (1) = 3

T (3) = 1 + 2 · T (2) = 7

T (4) = 1 + 2 · T (3) = 15

...

T (N) = 1 + 2 · T (N − 1) = 2N − 1

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 63 / 79

Tartalom

1 Faktorialis

2 Fibonacci sorozat

3 Hatvanyozas

4 Hanoi tornyai

5 Sorozatszamıtas rekurzıv megvalosıtasa

6 Linearis kereses rekurzıv megvalosıtasa

7 Megszamlalas rekurzıv megvalosıtasa

8 Maximumkivalasztas rekurzıv megvalosıtasa

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 64 / 79

Sorozatszamıtas rekurzıv megvalosıtasa

Otlet a rekurzıv megvalosıtashoz (osszegzes peldajan)

Vegyuk az x tomb utolso (n-edik) elemet. Ezt az elemet kell hozzaadni azosszes elotte levo osszegehez.

Az elso n − 1 darab elem osszeget a rekurzıvan meghıvott fuggveny majdszolgaltatja.

A rekurzio leallasa: ha n = 0, akkor adjon vissza a fuggveny 0-t.

Egy valtozonak jelolnie kell, hogy az aktualisan vizsgalt resztombnek mi azutolso eleme. Ez lesz a jobb valtozo, melynek kezdeti erteke n, majd arekurzıv hıvasok soran mindig 1-gyel csokken.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 65 / 79

Sorozatszamıtas rekurzıv megvalosıtasa

PszeudokodBemenet: x − T tomb, jobb − egeszKimenet: A vizsgalt resztomb elemeire nezve a ⊕ muvelet eredmenye.

fuggveny SorozatszamıtasRekurzıv(x , jobb)ha jobb = 0 akkor

vissza ert ek0

kulonbenvissza SorozatszamıtasRekurzıv(x , jobb − 1)⊕ x [jobb]

elagazas vegefuggveny vege

Fuggveny hıvasa: SorozatszamıtasRekurzıv(x , n)

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 66 / 79

Tartalom

1 Faktorialis

2 Fibonacci sorozat

3 Hatvanyozas

4 Hanoi tornyai

5 Sorozatszamıtas rekurzıv megvalosıtasa

6 Linearis kereses rekurzıv megvalosıtasa

7 Megszamlalas rekurzıv megvalosıtasa

8 Maximumkivalasztas rekurzıv megvalosıtasa

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 68 / 79

Linearis kereses rekurzıv megvalosıtasa

Az algoritmus otlete

Vizsgaljuk meg a tomb elso elemet.

Ha P tulajdonsagu, akkor nem kell tovabb vizsgalodni. A fuggveny visszater azaktualis elem indexevel.Ha viszont nem P tulajdonsagu, akkor egy olyan resztombben kell tovabbvizsgalodni, melynek nem eleme az aktualisan vizsgalt elem.

Rekurzıv modon vegezzuk a fentieket. A rekurzıv hıvasok veget ernek, ha

talaltunk P tulajdonsagu elemet;az aktualisan vizsgalt resztomb 0 elemu.

Kell egy valtozo, amely az aktualis resztomb elso elemet adja meg. Ez lesz abal , melynek kezdeti erteke 1, es minden rekurzıv hıvasnal 1-gyel no az erteke.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 69 / 79

Linearis kereses rekurzıv megvalosıtasa

PszeudokodBemenet:x −T tomb, bal − egesz, n − egesz (tomb merete), P − logikai (tulajdonsag)

Kimenet: Az elso P tulajdonsagu elem indexe, illetve ha nincs P tulajdonsaguelem, akkor 0.fuggveny LinearisKeresesRekurzıv(x , bal , n,P)

ha bal > n akkorvissza 0

kulonbenha P (x [bal ]) akkor

vissza balkulonben

vissza LinearisKeresesRekurzıv(x , bal + 1, n, P)elagazas vege

elagazas vegefuggveny vege

Fuggveny hıvasa: LinearisKeresesRekurzıv(x , 1, n, P)

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 70 / 79

Tartalom

1 Faktorialis

2 Fibonacci sorozat

3 Hatvanyozas

4 Hanoi tornyai

5 Sorozatszamıtas rekurzıv megvalosıtasa

6 Linearis kereses rekurzıv megvalosıtasa

7 Megszamlalas rekurzıv megvalosıtasa

8 Maximumkivalasztas rekurzıv megvalosıtasa

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 72 / 79

Megszamlalas rekurzıv megvalosıtasa

Algoritmus otlete

Hatarozzuk meg rekurzıv modon, hogy az aktualis elem elott hany darab Ptulajdonsagu elem talalhato.

Ha az aktualis elem P tulajdonsagu, akkor a fuggveny visszateresi erteke azaktualis elem elott levo P tulajdonsagu elemek szama + 1.

Ha az aktualis elem nem P tulajdonsagu, akkor a fuggveny visszateresi ertekeaz aktualis elem elott levo P tulajdonsagu elemek szama legyen.

A rekurzıv hıvasok akkor ernek veget, ha az eppen vizsgalt resztomb merete 0.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 73 / 79

Megszamlalas rekurzıv megvalosıtasa

Pszeudokod

Bemenet: x − T tomb, jobb − egesz, P − logikai (tulajdonsag)Kimenet: A vizsgalt resztombben az P tulajdonsagu elemek szama.

fuggveny MegszamlalasRekurzıv(x , jobb,P)ha jobb = 0 akkor

vissza 0kulonben

ha P (x [jobb]) akkorvissza 1 + MegszamlalasRekurzıv(x , jobb − 1, P)

kulonbenvissza MegszamlalasRekurzıv(x , jobb − 1, P)

elagazas vegeelagazas vege

fuggveny vege

Fuggveny hıvasa: MegszamlalasRekurzıv(x , n, P)

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 74 / 79

Tartalom

1 Faktorialis

2 Fibonacci sorozat

3 Hatvanyozas

4 Hanoi tornyai

5 Sorozatszamıtas rekurzıv megvalosıtasa

6 Linearis kereses rekurzıv megvalosıtasa

7 Megszamlalas rekurzıv megvalosıtasa

8 Maximumkivalasztas rekurzıv megvalosıtasa

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 76 / 79

Maximumkivalasztas rekurzıv megvalosıtasa

Algoritmus otlete

Hatarozzuk meg rekurzıv modon az aktualis elem elotti elemekmaximumanak helyet.

Ha az aktualis elem nagyobb, mint a megelozo elemek maximuma, akkor afuggveny visszateresi erteke legyen az aktualis elem indexe.

Ha az aktualis elem nem nagyobb, mint a megelozo elemek maximuma, akkora fuggveny visszateresi erteke legyen a megelozo elemek maximumanakindexe.

A rekurzıv hıvasok erjenek veget, ha a vizsgalt resztomb egy elemu. Ekkor avizsgalt egyetlen elem a resztomb maximalis eleme.

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 77 / 79

Maximumkivalasztas rekurzıv megvalosıtasa

PszeudokodBemenet: x − T tomb, jobb − egesz; ahol T osszehasonlıthatoKimenet: A vizsgalt resztombben a maximalis erteku elem indexe.

fuggveny MaximumkivalasztasRekurzıv(x , jobb)ha jobb = 1 akkor

vissza 1kulonben

max ←MaximumkivalasztasRekurzıv(x , jobb − 1)ha x [jobb] > x [max ] akkor

vissza jobbkulonben

vissza maxelagazas vege

elagazas vegefuggveny vege

Fuggveny hıvasa: MaximumkivalasztasRekurzıv(x , n)

Sergyan (OE NIK AII) Programozas I. 2014. november 3. 78 / 79