Rekurzió 1. Szlávi Péter ELTE Informatika Szakmódszertani Csoport

Slides:



Advertisements
Hasonló előadás
A HELYI ÉS A TELEPÜLÉSI ADÓRENDELETEK SZABÁLYOZÁSÁNAK EGYES KÉRDÉSEI.
Advertisements

Kocsis Tibor Kaposvár, március 01. Vállalatok K+F+I tevékenységének támogatása.
2011. évi zárás Készítette: Juhász Ágnes. 1. Zárást megelőző feladatok  Leltározás  Folyószámla egyeztetés (kapcsolt vállalkozásoktól egyenlegkérés)
AZ ISKOLA–EGÉSZSÉG KÖZPONT – FORMA ÉS TARTALOM A TÁMOP KIEMELT PROJEKT KÖZNEVELÉSI ALPROJEKTJÉNEK CÉLJAI, A MEGVALÓSÍTÁS MÓDSZEREI ÉS A SZAKMAI.
Okok Piaci környezet – több mint 70 felsőoktatási intézmény, ezek közül több szinte ugyanolyan képzési palettát, hasonló lehetőségeket kínál Társadalmi.
A MINŐSÉGFEJLESZTÉSI TERÜLET 2007 Menner Ákos. A minőségfejlesztés intézményi ritmusa Önértékelés 2006 Önértékelésből származó fejlesztési célkitűzések.
1 Az önértékelés mint projekt 6. előadás 1 2 Az előadás tartalmi elemei  A projekt fogalma  A projektek elemei  A projekt szervezete  Projektfázisok.
1 Számvitel alapjai Gazdálkodás:a társadalmi újratermelési folyamat szakaszainak (termelés, forgalom, elosztás, fogyasztás) megszervezésére, az ahhoz rendelkezésre.
A székesfehérvári fiatalok helyzete
Gazdasági informatika - bevezető
Work-based Learning in CVET Az ALFA KISOSZ Érdekvédő és Képző Egyesület szerepe a projekt megvalósításában Előadó: Czibula Zoltán igazgató ALFAKÉPZŐ.
Számítógépes szimuláció
Muraközy Balázs: Mely vállalatok válnak gazellává?
A rehabilitációt segítő támogatások, jogszabályi változások
Logo Országos Számítástechnikai Tanulmányi Verseny
Új továbbképzési lehetőségek tanároknak és oktatóknak
Programstruktúrák.
Óvodától az érettségiig - a kompetencia-alapú oktatás Szegeden
Mayer József Budapest február 27.
Microsoft Office Publisher
Fraktálok a tőzsdén Szegedi Tudományegyetem
A közigazgatással foglalkozó tudományok

PHP - függvények.
Kockázat és megbízhatóság
Algoritmusok és Adatszerkezetek I.
1993-as közoktatási törvény
Környezeti teljesítményértékelés
VEREM.
Új szolgáltatások illesztése működő rendszerekhez SOA alulnézetben
Nyelvek típusossága.
Adatbázis-kezelés (PL/SQL)
FÜGGVÉNYEK Legyen adott A és B két nem üres (szám)halmaz. Az A halmaz minden eleméhez rendeljük hozzá a B halmaz pontosan egy elemét. Ezt az egyértelmű.
A PDCA elv alkalmazása az információvédelmi irányítási rendszerekben 1
2. Bevezetés A programozásba
VB ADATTÍPUSOK.
Közigazgatási alapvizsga a Probono rendszerben
Business Mathematics
középfokú felvételi eljárás
Algoritmusok és Adatszerkezetek I.
A KÖZIGAZGATÁSI PERRENDTARTÁSRÓL SZÓLÓ ÉVI I
Algoritmusok és Adatszerkezetek I.
A hatékony adományozás eszközei igazgató, Magyar Adományozói Fórum
Készítette: Sinkovics Ferenc
A klinikai gyógyszerészet jövőképe a köztestületi célrendszerben
AVL fák.
Aritmetikai kifejezések lengyelformára hozása
Kifejezések kiértékelése * Lengyel-forma
A villamos installáció problémái a tűzvédelem szempontjából
Környezeti Kontrolling
TÁMOP A pályaorientáció rendszerének tartalmi és módszertani fejlesztése – Regionális workshop Zétényi Ákos.
Új pályainformációs eszközök - filmek
Szabványok, normák, ami az ÉMI minősítési rendszerei mögött van
Zanáné Haleczky Katalin október 09.
A csoportok tanulása, mint a szervezeti tanulás alapja
Tremmel Bálint Gergely ELTE-TTK, környezettudomány MSc
Bináris kereső fák Definíció: A bináris kereső fa egy bináris fa,
A Lineáris Keresés Buktatói
Szakképzési Önértékelési Modell II. Fejlesztési szint EREDMÉNYEK 4. 8
SZAKKÉPZÉSI ÖNÉRTÉKELÉSI MODELL I. HELYZETFELMÉRŐ SZINT FOLYAMATA 8
További rendező és kereső algoritmusok
A szállítási probléma.
Matematika II. 5. előadás Geodézia szakmérnöki szak 2015/2016. tanév
Műveletek, függvények és tulajdonságaik Mátrix struktúrák:
Mintaillesztés Knuth-Morris-Pratt (KMP) algoritmus
Iskolai szociális segítő
LIA Alapítványi Ált. Isk. és Szki. Piliscsabai Tagintézménye
A részekre bontás tilalma és annak gyakorlati alkalmazása
Algoritmusok.
Táblázatkezelés 4. Képletek használata.
Előadás másolata:

Rekurzió 1. Szlávi Péter ELTE Informatika Szakmódszertani Csoport szlavi@ludens.elte.hu http://izzo.inf.elte.hu/~szlavi 2000

Tartalom 0 Bevezetés 1 Rekurzív specifikáció 0.1 A rekurzió lényege; „klasszikus” példák 0.2 A rekurzió helye a programkészítés folyamatában 1 Rekurzív specifikáció 1.1 Formalizmus 1.2 Példák 2 Rekurzív specifikáció és rekurzív algoritmus 3 Rekurzió megvalósítása nem rekurzív környezetben 3.1 Problémák 3.2 Példák 3.3 A valódi megoldás ötlete, avagy mit tesz egy fordítóprogram? 2019.04.26. Rekurzió 1

Tartalom 4 Rekurzió és iteráció 5 Rekurzív típusok 4.1 Oda 4.2 Vissza 5 Rekurzív típusok 5.1 Nevezetes rekurzív adatszerkezetek 5.2 Rekurzív adatszerkezetek megadása 5.3 A struktúrabejárás mint a feldolgozás „kerete” 6 Rekurzív adattípusok: fák 6.1 Bináris fák 6.2 Nem bináris fák 6.3 B-fák 2019.04.26. Rekurzió 1

0 Bevezetés 0.1 A rekurzió lényege; „klasszikus” példák Lényeg: „önhivatkozás” Például: Közismert hatékonysági gondok: lassúság nagy helyfoglalás „Klasszikusok”: faktoriális számok Fibonacci-számok* Előzetes magyarázat: a rekurzió „szervezkedési” többlet- tevékenysége (vermelések) 2019.04.26. Rekurzió 1

0 Bevezetés (folytatás) Ackermann-függvény* : Elvadultságáról: Ack(0,m)=m+1 • Ack(1,m)=m+2 Ack(2,m)=2*m+3 • Ack(3,m)=2m+3-3 Ack(4,m)= 2 -3, ahol az  a 2-t m+2-ször tartalmazza kitevőként. Binomiális számok: 2019.04.26. Rekurzió 1

0 Bevezetés (folytatás) Quick sort rendezés : 2019.04.26. Rekurzió 1

0 Bevezetés (folytatás) Koch fraktál : 2019.04.26. Rekurzió 1

0 Bevezetés (folytatás) Hanoi tornyai : 2019.04.26. Rekurzió 1

0 Bevezetés (folytatás) 2019.04.26. 0 Bevezetés (folytatás) 0.2 A rekurzió helye a programkészítés folyamatában: Rekurzív specifikáció  Nem rekurzív specifikáció   Rekurzív algoritmus  Nem rekurzív algoritmus   Rekurzív programkód  Nem rekurzív programkód   Számítógép Számítógép Megjegyzés: a rekurzió elvont értelemben általánosabb eszköz, mint az ite- ráció. [L. McCarthy tétele, Paterson-Hewitt tétele a Manna: „Programo- zás elmélet” c. könyvben.] McCarthy tétele: Minden folyamatábra-séma áttranszformálható vele ekvivalens rekurzív sémává. Paterson-Hewitt tétele: Nincs olyan folyamatábra-séma (akárhány programváltozót is engedünk meg), amely ekvivalens lenne az alábbi rekurzív sémával: SA:=F(a), ahol F(y):=If p(y) then f(y) else h(F(g1(y), F(g2(y)). 2019.04.26. Rekurzió 1 Rekurzió 1

1 Rekurzív specifikáció 1.1 Formalizmus(ról egy példán keresztül) Be: NN, XH* … Ki: Y … Ef: N=Hossz(X) ... Uf: Y=RekFv(X,N) Def: RekFv(x,n): H*  N  H*  f(x,n) , ha T(x,n) RekFv(x,n) :=   g(RekFv(x,n-1)) , egyébként Megállapodások: 1. Általában csak az utófeltételbeli definíciót adjuk meg a továbbiakban. Nem rekurzív ág(ak) Rekurzív ág(ak) 2019.04.26. Rekurzió 1

1 Rekurzív specifikáció (folytatás) 2019.04.26. 1 Rekurzív specifikáció (folytatás) 2. Az alábbi konstansok, függvények és operátorok de- finíció nélkül fölhasználhatók a rekurzív függvény definiálásakor: ( _ ) – Üres sorozat Xi – az X sorozat i. eleme Hossz:H*N, Hossz((s1,…,sN)):=N Végére:HH*H*, Végére(x,(s1,…,sN)):=(s1,…,sN,x) Eleje:H*NH*, Eleje((s1,…,sN),i):=(s1,…,si) 2019.04.26. Rekurzió 1 Rekurzió 1

1 Rekurzív specifikáció (folytatás) 1.2 Példák Sorozatszámítás tétel Eldöntés tétel Kiválasztás tétel Keresés tétel 2019.04.26. Rekurzió 1

1 Rekurzív specifikáció (folytatás) 2019.04.26. 1 Rekurzív specifikáció (folytatás) Megszámolás tétel Maximumkiválasztás tétel Másolás tétel Kiválogatás tétel Hf: maximumérték kiválasztás 2019.04.26. Rekurzió 1 Rekurzió 1

1 Rekurzív specifikáció (folytatás) Megcseréli az X Maximum(X,n)-edik és n-edik elemét. Hf Rendezés maximumkiválasztással Figyelem: itt az n a sorozat még rendezendő részének utolsó elemének indexét jelöli; s csak kezdetben igaz: n=Hossz(X) Szétválogatás tétel Quick sort: hf L. előbb 2019.04.26. Rekurzió 1

2 Rekurzív specifikáció és algoritmus Általánosságok: ...emlékeztető a struktúra szerinti feldolgozás elvére, és alkalmazása a függvények világában… Példák: Fibonacci-számok: Függvény Fib(Konstans N:Egész):Egész Elágazás N=0 esetén Fib:=0 N=1 esetén Fib:=1 egyéb esetben Fib:=Fib(N-1)+Fib(N-2) Elágazás vége Függvény vége. 2019.04.26. Rekurzió 1

2 Rekurzív specifikáció és algoritmus (folytatás) Ackermann-függvény: Függvény Ack(Konstans N,M:Egész):Egész Elágazás N=0 esetén Ack:=M+1 N>0 és M=0 esetén Ack:=Ack(N-1,1) egyéb esetben Ack:=Ack(N-1,Ack(N,M-1)) Elágazás vége Függvény vége. 2019.04.26. Rekurzió 1

2 Rekurzív specifikáció és algoritmus (folytatás) Binomiális számok: Függvény B(Konstans N,K:Egész):Egész Ha K=0 vagy K=N akkor B:=1 különben B:=B(N-1,K)+B(N-1,K-1) Elágazás vége Függvény vége. A másik definíciójú algoritmus: hf. 2019.04.26. Rekurzió 1

2 Rekurzív specifikáció és algoritmus (folytatás) „Quick sort” rendezés: Meggondolandó: 1. a paraméterek eltérő hozzáférési joga; 2. a „Szétválogatás” eljárás; 3. milyen szélsőséges helyzetek adódnak hatékonyság szempontjából. Eljárás Quick(Változó A:TSorozat, Konstans E,V:Egész): [E,V az A “rendezendő” rész eleje,vége] Szétválogat(A,E,V,K) Ha K-E>1 akkor Quick(A,E,K-1) Ha V-K>1 akkor Quick(A,K+1,V) Eljárás vége. 2019.04.26. Rekurzió 1

3 Rekurzió megvalósítása nem rekurzív környezetben 3.1 Problémák „Állatorvosi ló (-: csacsi :-)” – a faktoriális függvény Tételezzük föl, hogy a „környezet” képes az eljárá- sok többszörös (értsd: egymásba ágyazott) hívásának le- kezelésére. (Visszatérési cím a verembe; aktuális és formális paraméterek összekapcsolása.) Függvény Fakt(Konstans N:Egész):Egész Változó f:Egész Ha N=0 akkor f:=1 különben f:=N*Fakt(N-1) Fakt:=f Függvény vége. 2019.04.26. Rekurzió 1

3 Rekurzió megvalósítása nem rekurzív környezetben (folytatás) Milyen problémákkal szembesül a fordítóprogram, hogy a függvény végrehajtható legyen bármely N-re. Pl. ?Fakt(2)? Fakt(2)= 2N [Ha N=0 akkor … különben] f:=N* ?Fakt(N-1)? Fakt:=f Fakt(2)= 2N [Ha 2=0 akkor … különben] f:=2* ?Fakt(2-1)? Fakt:=f Fakt(2)= 2N [Ha 2=0 akkor … különben] f:=2* 1 Fakt:=2 Fakt(1)= 1N [Ha 1=0 akkor … különben] f:=1* 1 Fakt:=1 Fakt(1)= 1N [Ha 1=0 akkor … különben] f:=1* ?Fakt(1-1)? Fakt:=f Fakt(1)= 1N [Ha N=0 akkor … különben] f:=N* ?Fakt(N-1)? Fakt:=f Fakt(0)= 0N [Ha N=0 akkor] f:=1 Fakt:=f Fakt(0)= 0N [Ha 0=0 akkor] f:=1 Fakt:=1 2019.04.26. Rekurzió 1

3 Rekurzió megvalósítása nem rekurzív környezetben (folytatás) Összefoglalva a problémákat: A bemenő paraméter problematikája. Hogyan kerül a bemenő érték ugyanazzal a kóddal megvalósított eljáráshoz, azaz a rekurzívan újból a hí- votthoz? A függvényeljárások értékvisszaadása. Hogyan kerül a (rekurzívan) hívott függvény értéke a hívó eljárásban „felszínre”? A lokális változók egyedisége. 2019.04.26. Rekurzió 1

3 Rekurzió megvalósítása nem rekurzív környezetben (folytatás) A megoldás vázlata: 1. és 3. probléma – belépéskor vermelés, kilépéskor ve- remből kivétel. 2. probléma (nem csak rekurziónál) – az érték verembe tétele közvetlenül a visszatérés előtt. A függvényt eljárássá alakítva (s az értékét verembe téve). Pl. Eljárás Fakt(Konstans N:Egész): Verembe(N) [paraméter a verembe] Ha N=0 akkor Fakt:=1 különben Fakt(N-1) [„függvény”-hívás] Veremből(f) [Fakt(N-1) értékef] N:=VeremTető [az aktuális N] Fakt:=N*f [a függvényérték] Elágazás vége Veremből(N) [paraméter a veremből] Verembe(Fakt) [függvényérték a verembe] Eljárás vége. Csak az értékhez férés a cél. 2019.04.26. Rekurzió 1

3 Rekurzió megvalósítása nem rekurzív környezetben (folytatás) 2019.04.26. 3 Rekurzió megvalósítása nem rekurzív környezetben (folytatás) Fibonacci-számok: Eljárás Fib(Konstans N:Egész): Verembe(N) [paraméter a verembe] Elágazás N=0 esetén Fib:=0 N=1 esetén Fib:=1 egyéb esetben Fib(N-1); Veremből(f1) [1. részeredményf1] N:=VeremTető [paraméter a veremből] Verembe(f1) [„lokális” változó a verembe] Fib(N-2); Veremből(f2) [2. részeredményf2] Veremből(f1) [„lokális” változó a veremből] Fib:=f1+f2 [a függvényérték kiszámítása] Elágazás vége Veremből(N) [paraméter a veremből] Verembe(Fib) [függvényérték a verembe] Eljárás vége. Szándékosan nem jelöltük „lokális” változóként, hiszen éppen az ilyenek kezelését kell megoldanunk. Csak az értékhez férés a cél. Ad „Csak az értékhez férés a cél” megjegyzés: a ha van jobb módszer, pl. direkt címhozzáférés, az is jó, sőt… 2019.04.26. Rekurzió 1 Rekurzió 1

3 Rekurzió megvalósítása nem rekurzív környezetben (folytatás) 2019.04.26. 3 Rekurzió megvalósítása nem rekurzív környezetben (folytatás) Binomiális számok: Eljárás B(Konstans N,K:Egész): Verembe(N,K) Ha K=0 vagy K=N akkor B:=1 különben B(N-1,K); Veremből(b1) Veremből(K,N); Verembe(N,K) Verembe(b1) B(N-1,K-1) Veremből(b2); Veremből(b1) B:=b1+b2 Elágazás vége Veremből(K,N) Verembe(B) [függvényérték a verembe] Eljárás vége. Csak az értékhez férés a cél. Csak az N és a K értékéhez férés a cél. Ad „Csak az N és K értékéhez férés a cél” megjegyzés: a ha van jobb módszer, pl. direkt címhozzáférés, az is jó, sőt… Itt nem használható –érdemben- a VeremTető, mivel úgyis alá kellene látni; azaz a dupla Veremből helyett egy Veremből és egy VeremTető kellene (igaz, elegendő lenne egyetlen „szimpla” Verembe is). 2019.04.26. Rekurzió 1 Rekurzió 1

3 Rekurzió megvalósítása nem rekurzív környezetben (folytatás) 3.3 A valódi megoldás ötlete, avagy mit tesz egy fordítóprogram? A paraméterek számára a verembe helyet foglaló kódrészt generál. Pl. Eljárás QS(Változó x:T; Konstans e,v:Egész;Változó k:Egész) esetén a QS(t,a,b,c) híváskor ilyesfélét: Verembe(Cím(t)) [Típustól függetlenül!] Verembe(a); Verembe(b); Verembe(Cím(c)) Aktuális paraméterek Formális paraméterek 2019.04.26. Rekurzió 1

3 Rekurzió megvalósítása nem rekurzív környezetben (folytatás) Az eljárástörzsben pedig a verem aktuális tetejéhez képesti relatív című hivatkozásokkal. Pl. Cím(x)=VeremTartalom(SP-|Cím(k)|-|v|-|e|-|Cím(x)|) Cím(e)=SP-|Cím(k)|-|v|-|e| [bár a címe nem érhető el!] e=VeremTartalom(SP-|Cím(k)|-|v|-|e|) ... ahol a VeremTartalom annyi byte-nyi és olyan típusú érté- ket jelent, amely az adott adathoz tartozik; a |x| az x típusának megfelelő byte-szám. Pl. e=VeremTartalom(SP-|Cím(k)|-|v|-|e|) 2 byte-os egész számot jelent, hiszen e:Egész Ugyanezeket kell megtenni a lokális adatokkal is. 2019.04.26. Rekurzió 1