1 / 113

Rekurzija

Rekurzija. Gabrijela Krajnc. Rekurzja. Živel je mož, imel je psa, lepo ga je učil. Nekoč mu ukradel je kos mesa, zato ga je ubil. Na tablico zapisal je: Živel je mož, imel je psa, lepo ga je učil. Nekoč mu ukradel je kos mesa, zato ga je ubil. Na tablico zapisal je:

lucine
Download Presentation

Rekurzija

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. Rekurzija Gabrijela Krajnc

  2. Rekurzja Živel je mož, imel je psa, lepo ga je učil. Nekoč mu ukradel je kos mesa, zato ga je ubil. Na tablico zapisal je: Živel je mož, imel je psa, lepo ga je učil. Nekoč mu ukradel je kos mesa, zato ga je ubil. Na tablico zapisal je: Živel je mož, imel je psa, lepo ga je učil. Nekoč mu ukradel je kos mesa, zato ga je ubil. Na tablico zapisal je: Živel je mož, imel je psa, lepo ga je učil. Nekoč mu ukradel je kos mesa, zato ga je ubil. Na tablico zapisal je: ……

  3. Problemi • Izračunaj volumen telesa, preluknjanega nkrat • Poišči največje in najmanjše število v tabeli števil • Uredi podatke po velikosti. • Izračunaj produkt naravnih števil od 1 do n.

  4. Primer Faktoriela Rekurzivna definicija: n! = n * (n-1) * (n-2) * … * 3 * 2 * 1 To lahko zapišemo tudi na drugi način: n * (n-1) * (n-2) * … * 3 * 2 * 1 = n * (n-1)!  Faktoriela(n): Če je n = 0, je rezultat 1 sicer pa rezultat = n * faktoriela(n – 1)

  5. Primer Faktoriela public static int fac ( int n ) { if ( n == 1 ) return 1; return n * fac ( n - 1 ); }

  6. void main () { … … fac(4) … … } int fac ( int n ) { if ( n == 1 ) return 1; return n * fac ( n - 1 ); } main fac(4)

  7. void main () { … … fac(4) … … } int fac ( int n ) { if ( n == 1 ) return 1; return n * fac ( n - 1 ); } main fac n___ fac(4) 4

  8. void main () { … … fac(4) … … } int fac ( int n ) { if ( n == 1 ) return 1; return n * fac ( n - 1 ); } main fac n___ fac(4) 4

  9. void main () { … … fac(4) … … } int fac ( int n ) { if ( n == 1 ) return 1; return n * fac ( n - 1 ); } main fac n___ 4*fac(4-1) fac(4) 4

  10. void main () { … … fac(4) … … } int fac ( int n ) { if ( n == 1 ) return 1; return n * fac ( n - 1 ); } main fac n___ 3 fac n___ 4*fac(4-1) fac(4) 4

  11. void main () { … … fac(4) … … } int fac ( int n ) { if ( n == 1 ) return 1; return n * fac ( n - 1 ); } main fac n___ 3 fac n___ 4*fac(4-1) fac(4) 4

  12. void main () { … … fac(4) … … } int fac ( int n ) { if ( n == 1 ) return 1; return n * fac ( n - 1 ); } main fac n___ 3*fac(3-1) 3 fac n___ 4*fac(4-1) fac(4) 4

  13. void main () { … … fac(4) … … } int fac ( int n ) { if ( n == 1 ) return 1; return n * fac ( n - 1 ); } main fac n___ 2 fac n___ 3*fac(3-1) 3 fac n___ 4*fac(4-1) fac(4) 4

  14. void main () { … … fac(4) … … } int fac ( int n ) { if ( n == 1 ) return 1; return n * fac ( n - 1 ); } main fac n___ 2 fac n___ 3*fac(3-1) 3 fac n___ 4*fac(4-1) fac(4) 4

  15. void main () { … … fac(4) … … } int fac ( int n ) { if ( n == 1 ) return 1; return n * fac ( n - 1 ); } main fac n___ 2*fac(2-1) 2 fac n___ 3*fac(3-1) 3 fac n___ 4*fac(4-1) fac(4) 4

  16. void main () { … … fac(4) … … } fac n___ main 1 fac n___ 2*fac(2-1) 2 fac n___ 3*fac(3-1) 3 fac n___ 4*fac(4-1) fac(4) 4

  17. void main () { … … fac(4) … … } fac n___ main 1 fac n___ 2*fac(2-1) 2 fac n___ 3*fac(3-1) 3 fac n___ 4*fac(4-1) fac(4) 4

  18. void main () { … … fac(4) … … } fac n___ main 1 1 fac n___ 2*fac(2-1) 2 fac n___ 3*fac(3-1) 3 fac n___ 4*fac(4-1) fac(4) 4

  19. void main () { … … fac(4) … … } int fac ( int n ) { if ( n == 1 )return 1; return n * fac ( n - 1 ); } fac n___ main 1 1 fac n___ 2*1 2 fac n___ 3*fac(3-1) 3 fac n___ 4*fac(4-1) fac(4) 4

  20. void main () { … … fac(4) … … } main fac n___ 2*1 2 fac n___ 3*fac(3-1) 3 fac n___ 4*fac(4-1) fac(4) 4

  21. void main () { … … fac(4) … … } main fac n___ 2 2 fac n___ 3*fac(3-1) 3 fac n___ 4*fac(4-1) fac(4) 4

  22. void main () { … … fac(4) … … } main fac n___ 2 2 fac n___ 3*2 3 fac n___ 4*fac(4-1) fac(4) 4

  23. void main () { … … fac(4) … … } main fac n___ 3*2 3 fac n___ 4*fac(4-1) fac(4) 4

  24. void main () { … … fac(4) … … } main fac n___ 6 3 fac n___ 4*fac(4-1) fac(4) 4

  25. void main () { … … fac(4) … … } main fac n___ 6 3 fac n___ 4*6 fac(4) 4

  26. void main () { … … fac(4) … … } main fac n___ 4*6 fac(4) 4

  27. void main () { … … fac(4) … … } main fac n___ 24 fac(4) 4

  28. void main () { … … fac(4) … … } int fac ( int n ) { if ( n == 1 ) return 1; return n * fac ( n - 1 ); } main fac n___ 24 24 4

  29. void main () { … … fac(4) … … } main 24

  30. FAC(4) FAC(4) 4*

  31. FAC(4) FAC(4) FAC(3) FAC(3) 3 * 4*

  32. FAC(4) FAC(4) FAC(3) FAC(2) FAC(3) FAC(2) 2 * 3 * 4*

  33. FAC(4) FAC(4) FAC(3) FAC(2) FAC(3) FAC(1) FAC(2) 2 * 3 * FAC(1) 4*

  34. FAC(4) FAC(4) FAC(3) FAC(2) FAC(3) FAC(1) FAC(2) 2 * 1 1 3 * FAC(1) 4*

  35. FAC(4) FAC(4) FAC(3) FAC(2) FAC(3) 2 FAC(1) FAC(2) 2 * 1 1 3 * 2 FAC(1) 4*

  36. FAC(4) FAC(4) FAC(3) 6 FAC(2) FAC(3) 2 FAC(1) FAC(2) 2 * 1 1 3 * 2 FAC(1) 6 4*

  37. 24 FAC(4) FAC(4) FAC(3) 6 FAC(2) FAC(3) 2 FAC(1) FAC(2) 2 * 1 1 3 * 2 FAC(1) 6 4* 24

  38. Alternativa • Namesto, da izračunavamo:n * fac ( n - 1)Lahko gremo v drugi smeri:: 1 * 2 * 3 * 4 * … * ( n - 1 ) * n (((((1) * 2) * 3) * 4 ) * … * (n - 1)) * n

  39. Alternativa - nadaljevanje • S števcem gremo od 1 do n • Za vsako ko števec povečamo za 1, faktorieli pomnožimo vrednost števca.

  40. Naloga • Napišite rekurzivno funkcijo, ki poišče vsoto N celih števil. • Napišite rekurzivno funkcijo, ki vpisana števila izpiše v obratnem vrstnem redu.

  41. Drevesna rekurzija • Predpostavimo zaporedje Fibonaccijevih števil: 0, 1, 1, 2, 3, 5, 8, 13, 21, ... • To zaporedje je definirano z naslednjo formulo: /0Ko n = 0 fib(n)= |1 ko n = 1 \fib(n - 1) + fib(n - 2)drugače

  42. Drevesna rekurzija • Programski kod, ki računa fibonačijeva števila je naslednji: int fib ( int n ) { if ( n <= 0 ) return 0; else if ( n = 1 ) return 1; else return fib ( n - 1 ) + fib ( n - 2 ) ; }

  43. Kaj se zgodi ob klicu fib(5)? fib(5)

  44. Kaj se zgodi ob klicu fib(5)? fib(5) fib(3) fib(4)

  45. Kaj se zgodi ob klicu fib(5)? fib(5) fib(3) fib(4)

  46. Kaj se zgodi ob klicu fib(5)? fib(5) fib(3) fib(4) fib(3) fib(2)

  47. Kaj se zgodi ob klicu fib(5)? fib(5) fib(3) fib(4) fib(3) fib(2)

  48. Kaj se zgodi ob klicu fib(5)? fib(5) fib(3) fib(4) fib(3) fib(2) fib(2) fib(1)

More Related