Presentation is loading. Please wait.

Presentation is loading. Please wait.

Glava 11 Rekurzija.

Similar presentations


Presentation on theme: "Glava 11 Rekurzija."— Presentation transcript:

1 Glava 11 Rekurzija

2 Rekurzija Rekurzija je fundamentalna tehnika programiranja koja moze dati elegantna rjesenja za neke klase problema Glava 11 razmatra: Razmisljanje u rekurzivnom stilu Programiranje u rekurzivnom stilu Korektna upotreba rekurzije Primjeri rekurzije © 2004 Pearson Addison-Wesley. All rights reserved

3 Pregled Rekurzivno razmisljanje Rekurzivno programiranje
Upotreba rekurzije Rekurzija u grafici © 2004 Pearson Addison-Wesley. All rights reserved

4 Rekurzivne tehnike Rekurzivna definicija je ona koja koristi rijec ili koncept definisan pomocu vlastite definicije Kada definisemo neku englesku rijec, rekurzivna definicija je cesto nekorisna Ali u drugim situacijama, rkurzivna definicija moze na odgovarajuci nacin predstaviti koncept Prije primjene rekurzivnog programiranja najbolje je vezbati rekurzivno razmisljanje © 2004 Pearson Addison-Wesley. All rights reserved

5 Rekurzivne definicije
Razmottrimo slijedecu listu brojeva: 24, 88, 40, 37 Takva lista moze biti definisana kako slijedi: LISTA je: broj ili: broj zarez LISTA To jest, LISTA je definisana kao jedan broj, ili kao broj za kojim slijedi zarez iza koga je lista Koncept LISTA je koristen za definisanje samog sebe © 2004 Pearson Addison-Wesley. All rights reserved

6 Rekurzivne definicije
Rekurzivni dio definicije LISTA koristi se vise puta, zavrsavajuci sa ne-rekurzivnim dijelom: broj zarez LISTA , 88, 40, 37 , 40, 37 , 37 broj 37 © 2004 Pearson Addison-Wesley. All rights reserved

7 Beskonacna rekurzija Sve rekurzivne definicije imaju ne-rekurzivni dio
Ako nemaju, tada ne postoji nacin da se zavrsi rekurzivni put Takva definicija mogla bi prouzrokovati beskonacnu rekurziju Ovaj problem je slican beskonacnoj petlji, ali “petlja” koja se ne zavrsava je dio same definicije Ne-rekurzivni dio cesto se naziva bazni slucaj © 2004 Pearson Addison-Wesley. All rights reserved

8 Rekurzivne definicije
N!, za pozitivan broj N, je definisan kao proizvod svih cijelih brojeva izmedju 1 i N ukljucivo Ova se definicija moze predstaviti rekurzivno kao as: 1! = 1 N! = N * (N-1)! Faktorijal je definisan preko drugog faktorijala Nekada ce bazni slucaj 1! biti dostignut © 2004 Pearson Addison-Wesley. All rights reserved

9 Rekurzivne definicije
5! 5 * 4! 4 * 3! 3 * 2! 2 * 1! 1 2 6 24 120 © 2004 Pearson Addison-Wesley. All rights reserved

10 Pregled Rekurzivno razmisljanje Rekurzivno programiranje
Upotreba rekurzije Rekurzija u grafici © 2004 Pearson Addison-Wesley. All rights reserved

11 Rekurzivno programiranje
Metoda u Javi mmoze pozvati samu sebe; ako je postavljena na taj nacin, tada se naziva rekurzivna metoda Kod rekurzivne metode je struktuiran da obradjuje i bazni slucaj i opsti slucaj Svaki poziv metode postavlja novu okolinu za izvodjenje, sa novim parametrima i lokalnim varijablama Kao i kod svakog poziva metode, kada se metoda zavrsi, kontrola se vraca u metodu iz koje je bio poziv (koja moze biti raniji poziv same sebe) © 2004 Pearson Addison-Wesley. All rights reserved

12 Rekurzivno programiranje
Razmotrimo problem sumiranja svih brojeva izmedju 1 i nekog pozitivnog cijelog broja N Ovaj problem mozemo rekurzivno definisati kao: © 2004 Pearson Addison-Wesley. All rights reserved

13 Rekurzivno programiranje
// Ovaj metod vraca sumu od 1 do num public int sum (int num) { int result; if (num == 1) result = 1; else result = num + sum (n-1); return result; } © 2004 Pearson Addison-Wesley. All rights reserved

14 Rekurzivno programiranje
main sum sum(3) sum(1) sum(2) result = 1 result = 3 result = 6 © 2004 Pearson Addison-Wesley. All rights reserved

15 Rekurzivno programiranje
Primijetimo da ako mi mozemo koristiti rekurziju za rjesavanje problema, to ne znaci da trebamo Na primjer, mi obicno necemo koristiti rekurziju za problem sumiranja brojeva od 1 do N, jer iterativna verzija je jednostavnija za razumijevanje Ipak, za neke probleme, rekurzija daje elegantna rjesenja, cesto cistija od iterativne verzije Vi morate pazljivo odluciti kada je rekurzija korektna tehnika za rjesavanje nekog problema © 2004 Pearson Addison-Wesley. All rights reserved

16 Indirektna rekurzija Metod koji poziva smog sebe smatra se direktnom rekurzijom Neka metoda moze pozvati drugu metodu, koja zove drugu, itd., dok napokon originalna metoda ne bude ponovo pozvana Na primjer, metoda m1 moze pozvati m2, koja poziva m3, koja sa svoje strane poziva m1 ponovo Ovo se naziva indirektna rekurzija, a zahtijeva istu paznju kao i direktna rekurzija Ona je teza za pracenje i debagiranje © 2004 Pearson Addison-Wesley. All rights reserved

17 Indirektna rekurzija m1 m2 m3
© 2004 Pearson Addison-Wesley. All rights reserved

18 Pregled Rekurzivno razmisljanje Rekurzivno programmiranje
Upotreba rekurzije Rekurzija u grafici © 2004 Pearson Addison-Wesley. All rights reserved

19 Obilazak lavirinta Mozemo koristiti rekurziju za nalazenje puta kroz lavirint Iz svake lokacije mozemo pretrazivati u svakom pravcu Rekurzija pamti trag puta kroz lavirint Osnovni slucaj je pogresan potez ili dostizanje krajnje destinacije Vidi MazeSearch.java (strana 583) Vidi Maze.java (strana 584) © 2004 Pearson Addison-Wesley. All rights reserved

20 Hanojske kule Hanojske kule je problem sa tri vertikalna stapa i vise diskova koji su na stapovima Diskovi su raznih velicina, na pocetku smjesteni na jedan stap sa najvecim diskom na dnu i sa strogo sve manjim diskovima prema vrhu Cilj je prebaciti sve diskove sa jednog stapa na drugi po slijedecim pravilima: Mozemo premjestiti samo jedan disk u jednom potezu Ne mozemo staviti veci disk na manji disk © 2004 Pearson Addison-Wesley. All rights reserved

21 Originalna konfiguracija
Hanojske kule Originalna konfiguracija Potez 1 Potez 2 Potez 3 © 2004 Pearson Addison-Wesley. All rights reserved

22 Hanojske kule Potez 4 Potez 5 Potez 6 Potez 7 (gotovo)
© 2004 Pearson Addison-Wesley. All rights reserved

23 Hanojske kule Iterativno rjesenje problema hanojskih kula je veoma slozeno Rekurzivno rjesenje je krace i elegantnije Vidi SolveTowers.java (strana 590) Vidi TowersOfHanoi.java (strana 591) © 2004 Pearson Addison-Wesley. All rights reserved

24 Pregled Rekurzivno razmisljanje Rekurzivno programiranje
Koristenje rekurzije Rekurzija u grafici © 2004 Pearson Addison-Wesley. All rights reserved

25 Poplocane slike Razmotrimo posao ponavljanog prikazivanja skupa slika u mozaiku Tri kvadranta sadrze individualne slike Gornj-lijevi kvadrant predstavlja uzorak Osnovni slucaj se dostize kada se oblast za slike suzi na odredjenu velicinu Vidi TiledPictures.java (strana 594) © 2004 Pearson Addison-Wesley. All rights reserved

26 Poplocane slike © 2004 Pearson Addison-Wesley. All rights reserved

27 Fraktali Fractal je geometrijski oblik sastavljen od istih uzoraka u razlicitim velicinama i orijentaciji Koch-ova pahuljica partikularni fraktal koji pocinje sa jednakostranicnim trouglom Za dobivanje fraktala viseg reda, strane trougla su zamijenjene sa uglastim segmentima linija Vidi KochSnowflake.java (strana 597) Vidi KochPanel.java (strana 600) © 2004 Pearson Addison-Wesley. All rights reserved

28 Koch-ova pahuljica < x5, y5> < x1, y1> < x5, y5>
Becomes © 2004 Pearson Addison-Wesley. All rights reserved

29 Koch-ova pahuljica © 2004 Pearson Addison-Wesley. All rights reserved

30 Koch-ova pahuljica © 2004 Pearson Addison-Wesley. All rights reserved

31 Zakljucak Glava 11 razmatra: Razmisljanje na rekurzivan nacin
Programiranje na rekurzivan nacin Korektna upotreba rekurzije Primjeri rekurzije © 2004 Pearson Addison-Wesley. All rights reserved


Download ppt "Glava 11 Rekurzija."

Similar presentations


Ads by Google