1 / 12

4 .Rekurzija 4.1. O rekurziji

4 .Rekurzija 4.1. O rekurziji Rekurzija je opšti metod koji se koristi za rešenje velike klase zadataka u računarstvu. Objekat se naziva rekurzivnim ako sadrži manju verziju samoga sebe ili se definiše pomoću svoje manje verzije. Na primer:.

venus
Download Presentation

4 .Rekurzija 4.1. O rekurziji

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 4.Rekurzija 4.1. O rekurziji Rekurzija je opšti metod koji se koristi za rešenje velike klase zadataka u računarstvu. Objekat se naziva rekurzivnim ako sadrži manju verziju samoga sebe ili se definiše pomoću svoje manje verzije. Na primer: Moć rekurzije leži u preciznom definisanju beskonačnog skupa objekata pomoću konačnog skupa izkaza.

  2. Rekurzija se realizje preko funkcija. • U opštem slučaju, rekurzivna definicija sadrži 2 dela: • nerekurzivni deo, koji omogućava izlazak iz kružnog definisanja (osnovni slučaj), • rekurzivni deo u kojem se objekat definiše pomoću samoga sebe(opšti slučaj). • Rekurzija, kao metod, prirodno se primenjuje na objekte koji su rekurzivno definisani. Da bi se primenjivala rekurzija potrebno je: • da postoji osnovni slučaj • da se pravi progres ka osnovnom slučaju (u procesu primene) • da se svaki rekurzivni poziv realizuje korektno.

  3. 4.2. Primeri rekurzivnih programa Primer 1. Računanje faktorijela Fakt.cpp Primer2. Računanje broja cifara celog broja n. BrojCifara.cpp U prethodnim primerima funkcija direktno poziva samu sebe. Tako realizovana rekurzija često se naziva samorekurzija.

  4. 4.3. Uzajamna rekurzija Ukoliko funkcija ne poziva direktno samu sebe, već poziva neku drugu funkciju, a ova neku treću itd. do n-te. Ako n-ta funkcija poziva prvu, onda opet imamo posla sa rekurzijom (prva funkcije indirektno poziva samu sebe). Ovakva vrsta rekurzije naziva se uzajamna rekurzija. f1 f2  ... fn Neka imamo sledeći zadatak: Zadatak 1. Izračunati : Uzrec.cpp

  5. 4.4. Rekurija i (ili) iteracija Rekurzija, kao i iteracija predstavlja opšti metod za nalaženje rešenja velikog broja zadataka. Svuda gde se primenjuje iteracija, može se primeniti i rekurzija. Važi i obrnuto. Primer 3. Napisati iterativni i rekurzivni metod za računanje n-tog korena datog pozitivnog broja a. Za računanje n-tog korena koristećemo Njutnovu formulu: Početna iteracija y0 bira se proizvoljno. Izračuanavanje ćemo realizovati sa mašinskom tačnošću. NtiRec.cpp NtiIter.cpp

  6. 4.5. Kada ne treba koristiti rekurziju? Primer 4. Fibonačijevi brojevi se definišu na sledeći način: Navedena definicija je rekurzivna pa se prirodno nameće korišćenje rekurzije. Fib.cpp, Fib1.cpp Međutim, iteracija ovde daje znatno bolje rezultate. FibIter.cpp Ako se pogleda način računanja nekog Fibonačijevog broja rekurzivnim putem, jasno je zašto iteracija daje znatno bolje rezultate.

  7. fib(5) fib(4) fib(3) fib(1) fib(3) fib(2) fib(2) fib(1) fib(1) fib(0) fib(1) fib(0) fib(1) fib(0) Računanje 5. Fibonačijevog broja rekurzivnim putem. Računanjefib(20) zahteva 21891 poziva funkcije fib, dok računanje fib(30) zahteva 2692537 poziva funkcije fib.

  8. 4.6. Kada koristiti rekurziju? Zadatak 2. Napistai program za računanje stepena xn za dato realno x0 i nN. Zadatak možemo rešiti rekurzivnim postupkom: StepenRec. cpp Međutim, ovde je mnogo efikasniji itertivni algoritam. StepenIt.cpp (Napomena: ovde je korišćen isti interfejs, ali različite su realizacije metoda.) Da li se može kreirati efikasniji rekurzivni potupak za rešenje postavljenog zadatka? Stepen xn možemo definisati na sledeći način:

  9. Ova definicija vodi direktno do mnogo efikasnijeg rekurzivnog postupka: StepenRec.cpp Zašto je ovaj postupak mnogo efikasniji? U 1. rešenju (Stepen1) rekurzija se primenjuje tako što se problem svodi na verziju koja je neznatno jednostavnija od originalne. Potreno je izvršiti n množenja, što dovodi do velikog broja rekurzivnih poziva. Međutim, u ovom primeru problem se u jednom koraku redukuje na dvostruko jednostavniju verziju. Princip koji je korišćen u realizaciji ovog algoritma je ‘’podeli pa pobedi’’ (divide and conquer). Ovde je potrebno izvršiti približno log(n) množenja.

  10. Kada se u rekurzivnoj realizaciji koristi iterativni algoritam, rekurzivni postupak je neefikasan (tada je prirodnije koristiti iteraciju). Međutim, ako se može pronaći drugačiji algoritam (kao u prethodnom primeru) koji je dovoljno efikasan, onda ima smisla primenjivazi rekurziju. Ponekad je mnogo jednostavnije realizovati rekurzivni postuak za rešenje nekog zadatka, nego li iterativni. Zadatak 3. Napisati program za rešenje problema ‘Hanojske kule’. (Opis problema) HanojK.cpp A B C

  11. Slična je situacija u sledećem primeru. Ovde se javlja tzv. dvostruka rekurzija, tj. kao argument javlja se rekurzivna funkcija koju treba računari. Zadatak4. Napisati metod za računanje Akermanove funkcije. Akermanova funkcija s eračuna prema sledećoj formuli: Akerman.cpp NAPOMENA: Akermanova funkcija ima važnu ulogu u teoriji rekurzivnih funkcija jer se pomoću nje može predstaviti sabiranje stepenovanje i množenje.

  12. 4.7. Pretraživanje i sortiranje zasnovano na rekurziji Neki postupci pretraživanja i sortiranja po svojoj prirordi su rekurzivni. U takvim postupcima prirodno se primenjuje rekurzija. 4.7.1. Binrno pretraživanje zasnovano na rekurziji. binrek.cpp, binrek1.cpp,.. 4.7.2. Quick-sort algoritam Opisa algoritma za brzo sortiranje. qsort.cpp. qsor1.cpp, qsort2.cpp

More Related