Upload
others
View
7
Download
1
Embed Size (px)
Citation preview
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
Mozgatott korong 1 rudrol 3 rudra.
Sergyan (OE NIK AII) Programozas I. 2014. november 3. 26 / 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 – 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 – 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
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