programiranje 2 · na primer, prilikom razmatranja nekog broja n , dozvoljeno je izvr siti...
TRANSCRIPT
Programiranje 2
Rekurzija
Milena Vujo�sevi�c Jani�ci�cJelena Graovac
www.matf.bg.ac.rs/~milena
www.matf.bg.ac.rs/~jgraovac
Beograd, 1. mart, 2017.
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
Pregled
1 Rekurzija � osnovni pojmovi
2 Dobre i lo�se strane rekurzije
3 Eliminisanje rekurzije
4 Literatura
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
De�nicijaMatemati�cka osnova rekurzijeRekurzija u ra�cunarstvuTotalna rekurzijaUzajamna rekurzija
Pregled
1 Rekurzija � osnovni pojmoviDe�nicijaMatemati�cka osnova rekurzijeRekurzija u ra�cunarstvuTotalna rekurzijaUzajamna rekurzija
2 Dobre i lo�se strane rekurzije
3 Eliminisanje rekurzije
4 Literatura
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
De�nicijaMatemati�cka osnova rekurzijeRekurzija u ra�cunarstvuTotalna rekurzijaUzajamna rekurzija
De�nicija rekurzije
Rekurzija je ...
... pristup u kojem se neki pojam, objekat ili funkcija de�ni�se naosnovu jednog ili vi�se baznih slu�cajeva i na osnovu pravila kojaslo�zene slu�cajeve svode na jednostavnije.
Primer:
bazni slu�caj:Roditelj osobe je predak te osobe
rekurzivni korak:Roditelj bilo kog pretka neke osobe je takode predakte osobe
Napomena: za ispravnu rekurzivnu de�niciju, neophodni su i baznislu�caj i rekurzivni korak.
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
De�nicijaMatemati�cka osnova rekurzijeRekurzija u ra�cunarstvuTotalna rekurzijaUzajamna rekurzija
Matemati�cka osnova rekurzije
Rekurzija je tesno povezana sa matemati�ckom indukcijom
Dokaz zasnovan na matemati�ckoj indukciji �cine dokazi baznogslu�caja (na primer, za n = 0) i dokazi induktivnog koraka: podpretpostavkom da tvrdenje va�zi za n dokazuje se da tvrdenjeva�zi za n + 1Bazni slu�caj rekurzivne deifnicije je slu�caj koji mo�ze biti re�senbez rekurzivnog poziva, dok u rekurzivnom koraku za vrednostn pretpostavljamo da je de�nicija raspolo�ziva za vrednost n− 1
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
De�nicijaMatemati�cka osnova rekurzijeRekurzija u ra�cunarstvuTotalna rekurzijaUzajamna rekurzija
Rekurzija u ra�cunarstvu
U programiranju, rekurzija je tehnika u kojoj funkcija pozivasamu sebe, direktno ili indirektno.
Rekurzivne funkcije su pogodne za �sirok spektar informati�ckihproblema, ali pored svojih dobrih strana imaju i lo�se.
Struktura de�nicije rekurzivne funkcije uklju�cuje dvekomponente:
uslov pri kome se funkcija rekurzivno poziva i rekurzivni poziv,uslov zavr�setka izvr�savanja funkcije i sam zavr�setak (izlaz izrekurzije).
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
De�nicijaMatemati�cka osnova rekurzijeRekurzija u ra�cunarstvuTotalna rekurzijaUzajamna rekurzija
Suma brojeva
Suma recipro�cnih vrednosti pozitivnih prirodnih brojeva mo�zese de�nisati na slede�ci na�cin:bazni slu�caj:
za n = 0 va�zi:∑
0
i=1(1/i) = 0
rekurzivni korak:za n > 0 va�zi:
∑ni=1
(1/i) = Σn−1
i=1(1/i) + (1/n)
Pethodnoj rekurzivnoj de�niciji odgovara rekurzivni kod:
double reciprocna_suma(unsigned n) {
if (n == 0)
return 0;
else
return reciprocna_suma(n-1) + (1.0/n);
}
Nacrtati stek okvire za izvr�savanje poziva za n=3.
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
De�nicijaMatemati�cka osnova rekurzijeRekurzija u ra�cunarstvuTotalna rekurzijaUzajamna rekurzija
Suma brojeva
Suma recipro�cnih vrednosti pozitivnih prirodnih brojeva mo�zese de�nisati na slede�ci na�cin:bazni slu�caj:
za n = 0 va�zi:∑
0
i=1(1/i) = 0
rekurzivni korak:za n > 0 va�zi:
∑ni=1
(1/i) = Σn−1
i=1(1/i) + (1/n)
Pethodnoj rekurzivnoj de�niciji odgovara rekurzivni kod:
double reciprocna_suma(unsigned n) {
if (n == 0)
return 0;
else
return reciprocna_suma(n-1) + (1.0/n);
}
Nacrtati stek okvire za izvr�savanje poziva za n=3.
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
De�nicijaMatemati�cka osnova rekurzijeRekurzija u ra�cunarstvuTotalna rekurzijaUzajamna rekurzija
Nizovi
I druge tipove podataka mogu�ce je predstaviti induktivno �stoih onda �cini pogodnim za primenu rekurzije
Niz je mogu�ce de�nisati na slede�ci na�cin
bazni slu�caj:prazan niz predstavlja niz
rekurzivni korak:niz dobijen dodavanjem elementa na kraj nekogniza predstavlja niz
Ako na ovaj na�cin shvatimo niz, primitivnom rekurzijom jemogu�ce de�nisati funkcije tako da pri izlasku iz rekurzijeobraduju slu�caj praznog niza, dok slu�caj nepraznog niza du�zinen re�savaju tako �sto rekurzivno razre�se njegov pre�ks du�zinen-1 i onda rezultat iskombinuju sa poslednjim elementom niza.
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
De�nicijaMatemati�cka osnova rekurzijeRekurzija u ra�cunarstvuTotalna rekurzijaUzajamna rekurzija
Suma niza
Sumiranje elemenata niza se mo�ze de�nisati na slede�ci na�cinbazni slu�caj:
za n = 0 va�zi:∑
0
i=1ai = 0
induktivni korak:za n > 0 va�zi:
∑ni=1
ai =∑n−1
i=1ai + an.
Pethodnoj rekurzivnoj de�niciji odgovara rekurzivni kod:
float sum(float a[], unsigned n) {
if (n == 0)
return 0.0f;
else
return sum(a, n-1) + a[n-1];
}
Nacrtati stek okvire za izvr�savanje funkcije sa dimenzijom nizan=3 i �clanovima niza a[3]={1.0, 2.0, 3.0}.
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
De�nicijaMatemati�cka osnova rekurzijeRekurzija u ra�cunarstvuTotalna rekurzijaUzajamna rekurzija
Suma niza
Sumiranje elemenata niza se mo�ze de�nisati na slede�ci na�cinbazni slu�caj:
za n = 0 va�zi:∑
0
i=1ai = 0
induktivni korak:za n > 0 va�zi:
∑ni=1
ai =∑n−1
i=1ai + an.
Pethodnoj rekurzivnoj de�niciji odgovara rekurzivni kod:
float sum(float a[], unsigned n) {
if (n == 0)
return 0.0f;
else
return sum(a, n-1) + a[n-1];
}
Nacrtati stek okvire za izvr�savanje funkcije sa dimenzijom nizan=3 i �clanovima niza a[3]={1.0, 2.0, 3.0}.
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
De�nicijaMatemati�cka osnova rekurzijeRekurzija u ra�cunarstvuTotalna rekurzijaUzajamna rekurzija
Totalna rekurzija
U nekim slu�cajevima, potrebno je koristiti i naprednije oblikeindukcije, kakva je, na primer, totalna indukcija.
Nakon dokazivanja induktivne baze, u okviru induktivnogkoraka mogu�ce je pretpostaviti tvrdenje za sve brojeve manjeod n i iz te pretpostavke dokazati tvrdenje za broj n.
Sli�cno, umesto primitivne rekurzije, dozvoljeno je pisatifunkcije koje su totalno rekurzivne.
Na primer, prilikom razmatranja nekog broja n, dozvoljeno jeizvr�siti rekurzivni poziv za bilo koji broj manji od njega (pa �caki vi�se rekurzivnih poziva za razli�cite prirodne brojeve manje odnjega).
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
De�nicijaMatemati�cka osnova rekurzijeRekurzija u ra�cunarstvuTotalna rekurzijaUzajamna rekurzija
Fibona�cijevi brojevi
Fibona�cijev niz {0,1,1,2,3,5,8,13,...} mo�ze se de�nisati u vidutotalne rekurzivne funkcije F :bazni slu�caj:
za n = 0 i n = 1 va�zi: F (0) = 0 i F (1) = 1rekurzivni korak:
za n > 1 va�zi: F (n) = F (n − 1) + F (n − 2)Funkcija za izra�cunavanje n-tog elementa Fibona�cijevog niza:
unsigned fib(unsigned n) {
if(n == 0 || n == 1)
return n;
else
return fib(n-1) + fib(n-2);
}
Nacrtati stek okvire za n = 5.Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
De�nicijaMatemati�cka osnova rekurzijeRekurzija u ra�cunarstvuTotalna rekurzijaUzajamna rekurzija
Fibona�cijevi brojevi
Fibona�cijev niz {0,1,1,2,3,5,8,13,...} mo�ze se de�nisati u vidutotalne rekurzivne funkcije F :bazni slu�caj:
za n = 0 i n = 1 va�zi: F (0) = 0 i F (1) = 1rekurzivni korak:
za n > 1 va�zi: F (n) = F (n − 1) + F (n − 2)Funkcija za izra�cunavanje n-tog elementa Fibona�cijevog niza:
unsigned fib(unsigned n) {
if(n == 0 || n == 1)
return n;
else
return fib(n-1) + fib(n-2);
}
Nacrtati stek okvire za n = 5.Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
De�nicijaMatemati�cka osnova rekurzijeRekurzija u ra�cunarstvuTotalna rekurzijaUzajamna rekurzija
NZD � Euklidov algoritam
NZD dva broja mo�ze se de�nisati u vidu totalne rekurzivnefunkcije nzd :bazni slu�caj:
za b = 0 va�zi nzd(a, 0) = arekurzivni korak:
za b > 0 va�zi nzd(a, b) = nzd(b, a%b)Funkcija nzd :
unsigned nzd(unsigned a, unsigned b) {
if (b == 0)
return a;
else
return nzd(b, a % b);
}
Nacrtati stek okvire za a = 18 i b = 4Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
De�nicijaMatemati�cka osnova rekurzijeRekurzija u ra�cunarstvuTotalna rekurzijaUzajamna rekurzija
NZD � Euklidov algoritam
NZD dva broja mo�ze se de�nisati u vidu totalne rekurzivnefunkcije nzd :bazni slu�caj:
za b = 0 va�zi nzd(a, 0) = arekurzivni korak:
za b > 0 va�zi nzd(a, b) = nzd(b, a%b)Funkcija nzd :
unsigned nzd(unsigned a, unsigned b) {
if (b == 0)
return a;
else
return nzd(b, a % b);
}
Nacrtati stek okvire za a = 18 i b = 4Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
De�nicijaMatemati�cka osnova rekurzijeRekurzija u ra�cunarstvuTotalna rekurzijaUzajamna rekurzija
Kule Hanoja
Problem kula Hanoja
Data su tri tornja i na prvom od njih n diskova opadaju�ce veli�cine;zadatak je prebaciti sve diskove sa prvog na tre�ci toranj (koriste�ci idrugi) ali tako da nikada nijedan disk ne stoji iznad manjeg.
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
De�nicijaMatemati�cka osnova rekurzijeRekurzija u ra�cunarstvuTotalna rekurzijaUzajamna rekurzija
Kule Hanoja
Animacija 1: Tower_of_Hanoi.gif
Animacija 2: Tower_of_Hanoi4.gif
Animacija 3: JS_Hanoi.zip
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
De�nicijaMatemati�cka osnova rekurzijeRekurzija u ra�cunarstvuTotalna rekurzijaUzajamna rekurzija
Kule Hanoja
Iterativno re�senje ovog problema je veoma kompleksno, arekurzivno je prili�cno jednostavno:bazni slu�caj:
ukoliko je n = 0, nema diskova koji treba da seprebacuju
rekurzivni korak:1) prebaci (rekurzivno) n − 1 diskova sapolaznog na pomo�cni toranj (kori�s�cenjemdolaznog tornja kao pomo�cnog),2) prebaci najve�ci disk sa polaznog na dolaznitoranj3) prebaci (rekurzivno) n − 1 diskova sapomo�cnog na dolazni disk (kori�s�cenjem polaznogtornja kao pomo�cnog).
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
De�nicijaMatemati�cka osnova rekurzijeRekurzija u ra�cunarstvuTotalna rekurzijaUzajamna rekurzija
Kule Hanoja
void prebaci(unsigned n, char polazni, char dolazni, char pomocni) {
if (n > 0) {
prebaci(n-1,polazni,pomocni,dolazni);
printf("Prebaci disk sa kule %c na kulu %c\n",polazni,dolazni);
prebaci(n-1,pomocni,dolazni,polazni);
}
}
Za vå�zbu:1 Re�siti modi�kovani problem kula Hanoja u kojem su dva
pomo�cna �stapa na raspolaganju.2 Re�siti modi�kovani problem kula Hanoja u kojem su tri
pomo�cna �stapa na raspolaganju.
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
De�nicijaMatemati�cka osnova rekurzijeRekurzija u ra�cunarstvuTotalna rekurzijaUzajamna rekurzija
U dosada�snjim primerima, rekurzivne funkcije su pozivale samesebe direktno.
Postoji i mogu�cnost da se funkcije medusobno pozivaju i takostvaraju uzajamnu rekurziju.
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
De�nicijaMatemati�cka osnova rekurzijeRekurzija u ra�cunarstvuTotalna rekurzijaUzajamna rekurzija
Parnost
Problem da li je broj paran mo�ze se rekurzivno de�nisati prekopojma neparnosti, pri �cemu je bazni slu�caj (za n = 0) da jebroj paran.
int paran(int n) {
if (n==0)
return 1;
else
return neparan(n-1);
}
int neparan(int n) {
if (n==0)
return 0;
else
return paran(n-1);
}
Nacrtati stek okvire za n = 3.
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
Dobre strane rekurzijeMane rekurzije
Pregled
1 Rekurzija � osnovni pojmovi
2 Dobre i lo�se strane rekurzijeDobre strane rekurzijeMane rekurzije
3 Eliminisanje rekurzije
4 Literatura
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
Dobre strane rekurzijeMane rekurzije
Dobre strane rekurzije
Dobre strane rekurzije su
�citljiv i kratak kod,
kod je jednostavan za
razumevanjeanalizudokazivanje korektnostiodr�zavanje
pogodna je za obradu rekurzivno de�nisanih strukturapodataka (stablo, lista...)
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
Dobre strane rekurzijeMane rekurzije
Mane rekurzije
Ipak, rekurzivna re�senja imaju i mana.
Cena poziva � Prilikom svakog rekurzivnog poziva kreira senovi stek okvir i kopiraju se argumenti funkcije. Kadarekurzivnih poziva ima mnogo, ovo mo�ze biti veomamemorijski i vremenski zahtevno, te je po�zeljno rekurzivnore�senje zameniti iterativnim.
Suvi�sna izra�cunavanja � U nekim slu�cajevima prilikomrazlaganja problema na manje potprobleme dolazi dopreklapanja potproblema i do vi�sestrukih rekurzivnih poziva zaiste potprobleme.
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
Dobre strane rekurzijeMane rekurzije
Mane rekruzije
Testirati Fibona�cijeve brojeve za razli�cite vrednosti
Eliminacija suvi�snog izra�cunavanja:
unsigned memo[MAX_FIB];
unsigned fib(unsigned n) {
if (memo[n]) return memo[n];
if(n == 0 || n == 1)
return memo[n] = n;
else
return memo[n] = fib(n-1) + fib(n-2);
}
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
Pregled
1 Rekurzija � osnovni pojmovi
2 Dobre i lo�se strane rekurzije
3 Eliminisanje rekurzije
4 Literatura
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
Eliminisanje rekurzije
Svaku rekurzivnu funkciju je mogu�ce implementirati na drugina�cin tako da ne koristi rekurziju.
Ne postoji jednostavan op�sti postupak za generisanje takvihalternativnih implementacija
Medutim, takav postupak postoji za neke specijalne slu�cajeve.
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
Repna rekurzija
Rekurzivni poziv je repno rekurzivni ukoliko je vrednostrekurzivnog poziva upravo i kona�can rezultat funkcije,tj. nakon rekurzivnog poziva funkcije ne izvr�sava se nikakvadodatna naredba.
U tom slu�caju, nakon rekurzivnog poziva nema potrebe vra�catise u k�od pozivne funkcije, te nema potrebe na stek sme�statitrenutni kontekst (vrednosti lokalnih promenljivih).
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
Primer � da li je ovo repna rekurzija?
Funkcija nzd :
unsigned nzd(unsigned a, unsigned b) {
if (b == 0)
return a;
else
return nzd(b, a % b);
}
Funkcija faktorijel :
unsigned faktorijel(unsigned n) {
if (n == 0)
return 1;
else
return n*faktorijel(n-1);
}
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
Primer � da li je ovo repna rekurzija?
Funkcija nzd : �>DA
unsigned nzd(unsigned a, unsigned b) {
if (b == 0)
return a;
else
return nzd(b, a % b);
}
Funkcija faktorijel :
unsigned faktorijel(unsigned n) {
if (n == 0)
return 1;
else
return n*faktorijel(n-1);
}
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
Primer � da li je ovo repna rekurzija?
Funkcija nzd : �>DA
unsigned nzd(unsigned a, unsigned b) {
if (b == 0)
return a;
else
return nzd(b, a % b);
}
Funkcija faktorijel : �>NE
unsigned faktorijel(unsigned n) {
if (n == 0)
return 1;
else
return n*faktorijel(n-1);
}
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
Eliminacija repne rekurzije � primer
unsigned nzd(unsigned a, unsigned b) {
if (b == 0)
return a;
else
return nzd(b, a % b);
}
unsigned nzd(unsigned a, unsigned b) {
pocetak:
if (b == 0)
return a;
else {
unsigned tmp = a % b;
a = b; b = tmp;
goto pocetak;
}
}
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
Eliminacija repne rekurzije � primer
unsigned nzd(unsigned a, unsigned b) {
pocetak:
if (b == 0)
return a;
else {
unsigned tmp = a % b;
a = b; b = tmp;
goto pocetak;
}
}
unsigned nzd(unsigned a, unsigned b) {
while (b != 0) {
unsigned tmp = a % b;
a = b; b = tmp;
}
return a;
}
Pogledati eliminaciju repne rekurzije u op�stem slu�caju u knjizi!
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
Eliminacija repne rekurzije � primer
unsigned nzd(unsigned a, unsigned b) {
pocetak:
if (b == 0)
return a;
else {
unsigned tmp = a % b;
a = b; b = tmp;
goto pocetak;
}
}
unsigned nzd(unsigned a, unsigned b) {
while (b != 0) {
unsigned tmp = a % b;
a = b; b = tmp;
}
return a;
}
Pogledati eliminaciju repne rekurzije u op�stem slu�caju u knjizi!
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
Pregled
1 Rekurzija � osnovni pojmovi
2 Dobre i lo�se strane rekurzije
3 Eliminisanje rekurzije
4 Literatura
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2
Rekurzija � osnovni pojmoviDobre i lo�se strane rekurzije
Eliminisanje rekurzijeLiteratura
Literatura
Peto poglavlje iz PJ-FM-P2 (str. 56 do str. 70)
GPL-P2 (str. 29 do str. 35)
Za pripremu ispita, slajdovi nisu dovoljni, neophodno je u�citi izknjige!
Milena Vujo�sevi�c Jani�ci�c Jelena Graovac Programiranje 2