programiranje 2 · na primer, prilikom razmatranja nekog broja n , dozvoljeno je izvr siti...

37

Upload: others

Post on 02-Jan-2020

8 views

Category:

Documents


0 download

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