Rekurzió. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

Hasonló dokumentumok
Rekurzió. (Horváth Gyula és Szlávi Péter előadásai. felhasználásával)

Algoritmizálás, adatmodellezés tanítása 1. előadás

5. Rekurzió és iteráció (Rekurzív programok átírása nemrekurzívvá)

Rekurzió. Működése, programtranszformációk. Programozás II. előadás. Szénási Sándor.

Rekurzió. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

Algoritmizálás, adatmodellezés tanítása 1. előadás

Rekurzió. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

Rekurzió. Témakörök. Rekurzió alapelve. Rekurzió alapjai Rekurzív algoritmusok végrehajtása Visszalépéses keresés Programtranszformációk

Algoritmizálás és adatmodellezés 2. előadás

Algoritmizálás és adatmodellezés tanítása 2. előadás

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

Algoritmizálás és adatmodellezés tanítása 3. előadás

Algoritmizálás, adatmodellezés tanítása 2. előadás

Egyszerű programozási tételek

Algoritmizálás, adatmodellezés tanítása 2. előadás

Adatszerkezetek II. 10. előadás

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

Összetett programozási tételek

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

Az összetett programozási tételek is egy tőről fakadnak

Készítette: Nagy Tibor István Felhasznált irodalom: Kotsis Domokos: OOP diasor Zsakó L., Szlávi P.: Mikrológia 19.

Objektum Orientált Programozás VII.

ELEMI PROGRAMOZÁSI TÉTELEK

Algoritmizálás, adatmodellezés 1. előadás

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

Objektumorientált Programozás VI.

Algoritmusok és adatszerkezetek I. 4. előadás

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

ALGORITMIKUS SZERKEZETEK ELÁGAZÁSOK, CIKLUSOK, FÜGGVÉNYEK

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.

Algoritmizálás, adatmodellezés tanítása 7. előadás

Informatikai tehetséggondozás:

Visszalépéses kiválogatás

Összetett programozási tételek 2.

A 2008/2009 tanévi Országos Középiskolai Tanulmányi Verseny első forduló feladatainak megoldása. INFORMATIKÁBÓL II. (programozás) kategóriában

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések)

Programozási tételek. PPT 2007/2008 tavasz.

Rekurzió. Dr. Iványi Péter

A 2017/2018 tanévi Országos Középiskolai Tanulmányi Verseny első fordulójának feladatai. INFORMATIKA II. (programozás) kategória

Algoritmizálás, adatmodellezés tanítása 6. előadás

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

15. A VERSENYRENDEZÉS

Programozási tételek. Dr. Iványi Péter

Algoritmizálás, adatmodellezés tanítása 8. előadás

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

Kombinatorikai algoritmusok. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

PROGRAMOZÁSMÓDSZERTAN

10. gyakorlat Tömb, mint függvény argumentum

Egyszerű programozási tételek

Programozás I. 1. előadás: Algoritmusok alapjai. Sergyán Szabolcs

Informatikai tehetséggondozás:

Adatbázis és szoftverfejlesztés elmélet. Programozási tételek

Kombinatorikai algoritmusok

Programozás alapjai. 6. gyakorlat Futásidő, rekurzió, feladatmegoldás

2. Rekurzió. = 2P2(n,n) 2 < 2P2(n,n) 1

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Rendezések. A rendezési probléma: Bemenet: Kimenet: n számot tartalmazó (a 1,a 2,,a n ) sorozat

A 2010/2011 tanévi Országos Középiskolai Tanulmányi Verseny első forduló feladatainak megoldása. INFORMATIKÁBÓL II. (programozás) kategóriában

Programozási alapismeretek 3. előadás

Informatikai tehetséggondozás:

A rész (30 pont) A.1. Vajon mit csinál? (5 pont) A generál(n) algoritmus egy n természetes számot dolgoz fel (0 < n < 100).

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

Dinamikus programozás II.

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

Közismereti informatika I. 4. előadás

Programozási alapismeretek 1. előadás

Algoritmizálás, adatmodellezés 1. előadás

Bevezetés a programozásba. 5. Előadás: Tömbök

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

29. Visszalépéses keresés 1.

Programozási segédlet

Láncolt listák Témakörök. Lista alapfogalmak

A félév során előkerülő témakörök

Algoritmusokfelülnézetből. 1. ELŐADÁS Sapientia-EMTE

Visszalépéses keresés korlátozással

Algoritmusok pszeudókód... 1

Rekurzív algoritmusok

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

Algoritmusok és adatszerkezetek I. 10. előadás

Informatikai tehetséggondozás:

Programozás Minta programterv a 2. házi feladathoz 1.

Informatikai tehetséggondozás:

Hatékonyság 2. előadás

PROGRAMOZÁSI TÉTELEK

Tartalom. Programozási alapismeretek. 11. előadás

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

Hatékonyság 1. előadás

Multihalmaz, intervallumhalmaz

Informatikai tehetséggondozás:

Algoritmizálás, adatmodellezés tanítása 11. előadás. (Horváth Gyula előadása alapján)

A C# programozási nyelv alapjai

Tartalomjegyzék Algoritmusok - pszeudókód

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés

Bevezetés az informatikába

Egyszerű programozási tételek

BABEŞ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR BBTE Matek-Infó verseny 1. tételsor INFORMATIKA írásbeli. A versenyzők figyelmébe:

Láncolt listák. Egyszerű, rendezett és speciális láncolt listák. Programozás II. előadás. Szénási Sándor

Átírás:

Rekurzió (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

Rekurzió és iteráció Balrekurzió Ha az eljárás első utasításaként szerepel a rekurzív hívás, akkor a rekurzió lényegében az első nem rekurzívan számolható érték megkeresését szervezi. Majd a visszatérés(ek) után végzi el a transzformációt. Vagyis fordított sorrendű földolgozást végez. Általános sémája: R(x,y): Ha p(x,y) akkor R(f(x),y); S(x,y) különben T(x,y) 208. 0. 8. 208. 0. 8. 8:6 Zsakó László:: Rekurzió 2/3 2

Rekurzió és iteráció Balrekurzió példák a feldolgozandóra a sorozat elemei egy soros állomány rekordjai, a sorozat elemeit láncolt ábrázolással tároljuk és az aktuális elemtől csak a következőt lehet elérni, az előzőt nem, a sorozat elemeit egy sor- vagy veremstruktúrában tároljuk, a sorozat elemeit mindig az előző elemből számítjuk, s a sorozat előre meg nem állapítható tagjától visszafelé kell kiírni az elemeket, nyelvünk csak olyan szövegkezelő függvényeket ismer, amelyek a szöveg első karakterét tudják megadni, illetve az első elhagyásával keletkezett részt. 208. 0. 8. 208. 0. 8. 8:6 Zsakó László:: Rekurzió 3/3 3

Rekurzió és iteráció 208. 0. 8. 208. 0. 8. 8:6 Zsakó László:: Rekurzió 4/3 4

Rekurzió és iteráció Balrekurzió általános átírása Ha feltehetjük, hogy az f függvénynek létezik inverze: R(x,y): :=0 Ciklus amíg p(x,y) x:=f(x); :=+ Ciklus vége T(x,y) Ciklus I=-től -ig x:=f - (x); S(x,y) Ciklus vége 208. 0. 8. 208. 0. 8. 8:6 Zsakó László:: Rekurzió 5/3 5

Rekurzió és iteráció Balrekurzió általános átírása Ha az f függvénynek nem létezik inverze: R(x,y): :=0 Ciklus amíg p(x,y) Verembe(x); x:=f(x); :=+ Ciklus vége T(x,y) Ciklus i=-től -ig Veremből(x); S(x,y) Ciklus vége 208. 0. 8. 208. 0. 8. 8:6 Zsakó László:: Rekurzió 6/3 6

Balrekurzió példa Rekurzió és iteráció Egy szó tükrözve kiírása, azaz betűi sorrendje megfordítása: Tükröz(szó): Ha nem üres?(szó) akkor Tükröz(elsőutániak(szó)) Ki: első(szó) 208. 0. 8. 208. 0. 8. 8:6 Zsakó László:: Rekurzió 7/3 7

Balrekurzió példa Rekurzió és iteráció Egy szó tükrözve kiírása, azaz betűi sorrendje megfordítása: Tükröz(szó): :=0 Ciklus amíg nem üres?(szó) Verembe(első(szó)); :=+ szó:=elsőutániak(szó) Ciklus vége Ciklus i=-től -ig Veremből(B); Ki: B Ciklus vége 208. 0. 8. 208. 0. 8. 8:6 Zsakó László:: Rekurzió 8/3 8

Balrekurzió példa Rekurzió és iteráció M-nél kisebb 2-hatványok visszafelé: Hatványok(K,M): Ha KM akkor Hatványok(2*K,M); Ki: K Hatványok(K,M): :=0 Ciklus amíg KM K:=2*K; :=+ Ciklus vége Ciklus I=-től -ig K:=K/2; Ki: K Ciklus vége 208. 0. 8. 208. 0. 8. 8:6 Zsakó László:: Rekurzió 9/3 9

Balrekurzió példa Rekurzió és iteráció Az inverz függvényt sokszor mi alkotjuk meg: Eljárás Valami(K,M): Ha KM akkor Valami(köv(K),M); Ki: K Eljárás Valami(K,M): :=0 Ciklus amíg KM honnan(köv(k)):=k K:=köv(K); :=+ Ciklus vége Ciklus i=-től -ig K:=honnan(K); Ki: K Ciklus vége 208. 0. 8. 8:6 Zsakó László:: Rekurzió 0/3

Problémák a ciklussal: Iteráció és rekurzió Vannak programozási nyelvek, ahol nincs ciklus, csak rekurzió. em mindig hatékony egy rekurzívan definiált függvény összes értékét kiszámolni. Az alábbi példában Rek(999999) kiszámításához rekurzívan csak 2 belső eljáráshívás kell, nemrekurzívan pedig 999999 értéket számíthatnánk ki: Re k( ) : Re k( f ( ) div 000) Re k( mod 000) ha ha 000 000 208. 0. 8. 8:6 Zsakó László:: Rekurzió /3

Elöltesztelős ciklus átírása Eljárás R(x): Ciklus amíg p(x) T(x) Ciklus vége Eljárás R(x): Ha p(x) akkor T(x); R(x) Iteráció és rekurzió Azaz az átírás eredménye egy jobbrekurzió. 208. 0. 8. 8:6 Zsakó László:: Rekurzió 2/3

Iteráció és rekurzió Hátultesztelős ciklus átírása Eljárás R(x): Ciklus S(x) amíg p(x) Ciklus vége Eljárás R(x): S(x) Ha p(x) akkor R(x) Azaz az átírás eredménye egy jobbrekurzió. 208. 0. 8. 8:6 Zsakó László:: Rekurzió 3/3

Számlálós ciklus átírása Eljárás R(x): Ciklus i=-től -ig S(x,i) Ciklus vége Először írjuk át elöltesztelősre! Eljárás R(x): i:= Ciklus amíg i S(x,i); i:=i+ Ciklus vége Iteráció és rekurzió 208. 0. 8. 8:6 Zsakó László:: Rekurzió 4/3

Számlálós ciklus átírása Erre már van átírási szabályunk: Eljárás R(x): i:=; RR(x,i) Iteráció és rekurzió Eljárás RR(x,i): Ha i akkor S(x,i); i:=i+; RR(x,i) Egyszerűbb az i növelése paraméterátadásnál: Eljárás RR(x,i): Ha i akkor S(x,i); RR(x,i+) 208. 0. 8. 8:6 Zsakó László:: Rekurzió 5/3

Ciklus és rekurzió Programozási tételek rekurzívan Megadtuk a ciklusok átírási szabályait, amivel minden ciklust alkalmazó program átírható rekurzívra. Ez az algoritmusok átírási szabályain alapult. Lehetséges másik út is: a nemrekurzív specifikációt írjuk át rekurzívra, majd abból készítsünk rekurzív algoritmust! 208. 0. 8. 8:6 Zsakó László:: Rekurzió 6/3

Sorozatszámítás Programozási tételek rekurzívan Bemenet:, XH, F:H H Kimenet: SH Előfeltétel: Utófeltétel: S=F(X, X ) Definíció: F X,..., X f F 0 F X,..., X, X ha 0 ha 0 208. 0. 8. 8:6 Zsakó László:: Rekurzió 7/3

Sorozatszámítás Programozási tételek rekurzívan F(,X): Ha =0 akkor F:=F0 különben F:=f(F(-,X),X()) Függvény vége. F X,..., X f F 0 F X,..., X, X ha 0 ha 0 208. 0. 8. 8:6 Zsakó László:: Rekurzió 8/3

Eldöntés Programozási tételek rekurzívan Bemenet:, XH, T:HL Kimenet: VanL Előfeltétel: Utófeltétel: Van=eldönt(X, X ) Definíció: eldönt X,..., X igaz ha T X eldöntx,..., X hamis ha 0 egyébként 208. 0. 8. 8:6 Zsakó László:: Rekurzió 9/3

Eldöntés Programozási tételek rekurzívan eldönt X,..., X igaz ha T X eldöntx,..., X hamis ha 0 egyébként eldönt(,x): Ha =0 akkor eldönt:=hamis különben ha T(X()) akkor eldönt:=igaz különben eldönt:=eldönt(-,x) Függvény vége. 208. 0. 8. 8:6 Zsakó László:: Rekurzió 20/3

Kiválasztás Programozási tételek rekurzívan Bemenet:, XH, T:HL Kimenet: S Előfeltétel: i (i): T(X i ) Utófeltétel: S=kiválaszt(X, X ) Definíció: kiválaszt X,..., X kiválaszt X,..., X ha T X egyébként 208. 0. 8. 8:6 Zsakó László:: Rekurzió 2/3

Kiválasztás Programozási tételek rekurzívan kiválaszt X,..., X kiválaszt X,..., X ha T X egyébként kiválaszt(,x): Ha T(X()) akkor kiválaszt:= különben kiválaszt:=kiválaszt(-,x) Függvény vége. Megjegyzés: Ez a megoldás az utolsó T tulajdonságú elemet adja meg. 208. 0. 8. 8:6 Zsakó László:: Rekurzió 22/3

Keresés Programozási tételek rekurzívan Bemenet:, XH, T:HL Kimenet: VanL, S Előfeltétel: Utófeltétel: (Van,S)=keres(X, X ) Definíció: keres X,..., X ( igaz, ) ha T X keresx,..., X ( hamis, ) ha 0 egyébként 208. 0. 8. 8:6 Zsakó László:: Rekurzió 23/3

Programozási tételek rekurzívan Keresés keres(,x): Ha =0 akkor keres:=(hamis,-) különben ha T(X()) akkor keres:=(igaz,) különben keres:=keres(-,x) Függvény vége. keres(,x,van,s): Ha =0 akkor Van:=hamis különben ha T(X()) akkor Van:=igaz; S:= különben keres(-,x,van,s) 208. 0. 8. 8:6 Zsakó László:: Rekurzió 24/3

Megszámolás Programozási tételek rekurzívan Bemenet:, XH, T:HL Kimenet: Db Előfeltétel: Utófeltétel: Db=számol(X, X ) Definíció: számol X,..., X számolx,..., X ha T X számolx,..., X 0 ha 0 egyébként 208. 0. 8. 8:6 Zsakó László:: Rekurzió 25/3

Megszámolás Programozási tételek rekurzívan 0 ha 0 számolx,..., X számolx,..., X ha T X számolx,..., X egyébként számol(,x): Ha =0 akkor számol:=0 különben ha T(X()) akkor számol:=számol(-,x)+ különben számol:=számol(-,x) Függvény vége. 208. 0. 8. 8:6 Zsakó László:: Rekurzió 26/3

Maximumkiválasztás Programozási tételek rekurzívan Bemenet:, XH Kimenet: Max Előfeltétel: >0 Utófeltétel: Max=maximum(X, X ) Definíció: maximum X,..., X ha X X maximum X,..., X maximum X,..., X egyébként ha 208. 0. 8. 8:6 Zsakó László:: Rekurzió 27/3

Programozási tételek rekurzívan Maximumkiválasztás maximum(,x): Ha = akkor maximum:= különben Ha X()>X(maximum(-,X)) akkor maximum:= különben maximum:=maximum(-,x) Függvény vége. maximum(,x): Ha = akkor maximum:= különben M:=maximum(-,X) Ha X()>X(M) akkor maximum:= különben maximum:=m Függvény vége. 208. 0. 8. 8:6 Zsakó László:: Rekurzió 28/3

Kiválogatás Programozási tételek rekurzívan Bemenet:, XH, T:HL Kimenet: Db, Y Előfeltétel: Utófeltétel: (Db,Y)=válogat(X, X ) Definíció: válogat X,..., X válogat X,..., X (, ) ha T X válogat X,..., X (0, ) ha 0 egyébként 208. 0. 8. 8:6 Zsakó László:: Rekurzió 29/3

Programozási tételek rekurzívan Kiválogatás válogat(,x): Ha =0 akkor válogat:=(0,-) különben ha T(X()) akkor válogat:=válogat(-,x)(,) különben válogat:=válogat(-,x) Függvény vége. Válogat(,X,Db,Y): Ha =0 akkor Db:=0 különben Válogat(-,X,Db,Y) Ha T(X()) akkor Db:=Db+; Y(Db):= 208. 0. 8. 8:6 Zsakó László:: Rekurzió 30/3

Rekurzió előadás vége