Iteracije in rekurzija Mehanizmi krmiljenja poteka Zaporedno izvajanje
![Iteracije in rekurzija Iteracije in rekurzija](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-1.jpg)
![Mehanizmi krmiljenja poteka • Zaporedno izvajanje ( prednost izvedbe izrazov) • Izbira (Selection) • Mehanizmi krmiljenja poteka • Zaporedno izvajanje ( prednost izvedbe izrazov) • Izbira (Selection) •](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-2.jpg)
![Kaj je iteracija? Iteracija v računalništvu je ponavljanje procesa v računalniškem programu. Pri tem Kaj je iteracija? Iteracija v računalništvu je ponavljanje procesa v računalniškem programu. Pri tem](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-3.jpg)
![Iteracije Iteracija ima običajno obliko zanke • Dve osnovni obliki: • Iteracija preko oštevilčenih Iteracije Iteracija ima običajno obliko zanke • Dve osnovni obliki: • Iteracija preko oštevilčenih](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-4.jpg)
![Primer: Fibonaccijeva števila • Fibonaccijeva števila tvorijo naslednje zaporedje 1, 2, 3, 5, 8, Primer: Fibonaccijeva števila • Fibonaccijeva števila tvorijo naslednje zaporedje 1, 2, 3, 5, 8,](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-5.jpg)
![Primer: plenilci in plen V danem področju imamo množico plenilcev (na primer lisic) in Primer: plenilci in plen V danem področju imamo množico plenilcev (na primer lisic) in](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-6.jpg)
![Populacija Lisic in zajcev Populacija Lisic in zajcev](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-7.jpg)
![Lisice in zajci : koda zajcev. Prej = 100; lisic. Prej = 100; // Lisice in zajci : koda zajcev. Prej = 100; lisic. Prej = 100; //](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-8.jpg)
![Primeri rekurzije Primeri rekurzije](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-9.jpg)
![Rekurzija Do rekurzije pride, če metoda kliče samo sebe, direktno ali indirektno preko verige Rekurzija Do rekurzije pride, če metoda kliče samo sebe, direktno ali indirektno preko verige](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-10.jpg)
![Primer: Izpis niza void print(String str, int index){ if (index < str. length()){ System. Primer: Izpis niza void print(String str, int index){ if (index < str. length()){ System.](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-11.jpg)
![Primer s potenco Definicija potence je X y = 1* X *…* X (y Primer s potenco Definicija potence je X y = 1* X *…* X (y](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-12.jpg)
![Rekurzivno računanje potence Postopek naj bo naslednji: Za izračun potence x na y ¨Če Rekurzivno računanje potence Postopek naj bo naslednji: Za izračun potence x na y ¨Če](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-13.jpg)
![Rekurzivna metoda private int potenca(int x, int y) { int // y>=0, returns x**y Rekurzivna metoda private int potenca(int x, int y) { int // y>=0, returns x**y](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-14.jpg)
![Sledenje klica : int z = factorial(4)= 4 * factorial(3) Vrne 3*2 = 6 Sledenje klica : int z = factorial(4)= 4 * factorial(3) Vrne 3*2 = 6](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-15.jpg)
![Lastnosti rekurzivnih metod Vse rekurzivne metode imajo naslednje lastnosti: ¨ Enega ali več osnovnih Lastnosti rekurzivnih metod Vse rekurzivne metode imajo naslednje lastnosti: ¨ Enega ali več osnovnih](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-16.jpg)
![Kako načrtujemo rekurzivne metode Korak 1. Bodimo leni. ¨Uporabimo rešitev manjše ali lažje verzije Kako načrtujemo rekurzivne metode Korak 1. Bodimo leni. ¨Uporabimo rešitev manjše ali lažje verzije](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-17.jpg)
![Primer: innverzija niza Funkcija vrne niz, v katerem so znaki pomnjeni v obratnem vrstnem Primer: innverzija niza Funkcija vrne niz, v katerem so znaki pomnjeni v obratnem vrstnem](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-18.jpg)
![Inverzija niza String reverse(String str, int index){ if (index == str. length()) return ""; Inverzija niza String reverse(String str, int index){ if (index == str. length()) return "";](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-19.jpg)
![Inverzija niza String reverse(String str, int index){ if (index == str. length()) return ""; Inverzija niza String reverse(String str, int index){ if (index == str. length()) return "";](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-20.jpg)
![Inverzija niza String reverse(String str, int index){ if (index == str. length()) return ""; Inverzija niza String reverse(String str, int index){ if (index == str. length()) return "";](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-21.jpg)
![Inverzija niza String reverse(String str, int index){ if (index == str. length()) return ""; Inverzija niza String reverse(String str, int index){ if (index == str. length()) return "";](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-22.jpg)
![Inverzija niza String reverse(String str, int index){ if (index == str. length()) return ""; Inverzija niza String reverse(String str, int index){ if (index == str. length()) return "";](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-23.jpg)
![Inverzija niza String reverse(String str, int index){ if (index == str. length()) return ""; Inverzija niza String reverse(String str, int index){ if (index == str. length()) return "";](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-24.jpg)
![Inverzija niza String reverse(String str, int index){ if (index == str. length()) return ""; Inverzija niza String reverse(String str, int index){ if (index == str. length()) return "";](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-25.jpg)
![Inverzija niza String reverse(String str, int index){ if (index == str. length()) return ""; Inverzija niza String reverse(String str, int index){ if (index == str. length()) return "";](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-26.jpg)
![Inverzija niza String reverse(String str, int index){ if (index == str. length()) return ""; Inverzija niza String reverse(String str, int index){ if (index == str. length()) return "";](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-27.jpg)
![Inverzija niza String reverse(String str, int index){ if (index == str. length()) return ""; Inverzija niza String reverse(String str, int index){ if (index == str. length()) return "";](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-28.jpg)
![Inverzija niza String reverse(String str, int index){ if (index == str. length()) return ""; Inverzija niza String reverse(String str, int index){ if (index == str. length()) return "";](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-29.jpg)
![Inverzija niza String reverse(String str, int index){ if (index == str. length()) return ""; Inverzija niza String reverse(String str, int index){ if (index == str. length()) return "";](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-30.jpg)
![Hanojski stolpiči Problem s Hanojskimi stolpiči je klasičen rekurzivni problem, ki temelji na preprosti Hanojski stolpiči Problem s Hanojskimi stolpiči je klasičen rekurzivni problem, ki temelji na preprosti](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-31.jpg)
![N ploščic s stolpa 1 na stolp 3 Začetno stanje: Stolp 1 Stolp 2 N ploščic s stolpa 1 na stolp 3 Začetno stanje: Stolp 1 Stolp 2](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-32.jpg)
![Nekaj prvih korakov Korak 1: Korak 2: Premik n-1 ploščic Stolp 1 Stolp 2 Nekaj prvih korakov Korak 1: Korak 2: Premik n-1 ploščic Stolp 1 Stolp 2](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-33.jpg)
![Koda v pascalu procedure Hanoi(n: integer; from, to, by: char); Begin if (n=1) then Koda v pascalu procedure Hanoi(n: integer; from, to, by: char); Begin if (n=1) then](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-34.jpg)
![Koda v javi (bolj popolna) public class Towers. Of. Hanoi { public static void Koda v javi (bolj popolna) public class Towers. Of. Hanoi { public static void](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-35.jpg)
![Kakšen bi bil izpis Move disk 1 from Tower 1 to Tower 3 Move Kakšen bi bil izpis Move disk 1 from Tower 1 to Tower 3 Move](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-36.jpg)
![Primer s fraktali Demo Primer s fraktali Demo](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-37.jpg)
![Preproga Sierpinski import java. applet. Applet; import java. awt. *; import java. awt. event. Preproga Sierpinski import java. applet. Applet; import java. awt. *; import java. awt. event.](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-38.jpg)
![Preproga Sierpinski (nadaljevanje) public void carpet(Graphics g, int i, int j, int k, int Preproga Sierpinski (nadaljevanje) public void carpet(Graphics g, int i, int j, int k, int](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-39.jpg)
![Primerjava iteracija : rekurzija (1) • Iteracija – – Uporabljamo strukture ponavljanja (for, while Primerjava iteracija : rekurzija (1) • Iteracija – – Uporabljamo strukture ponavljanja (for, while](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-40.jpg)
![Primerjava iteracija : rekurzija (1) • Še o rekurziji – – Terja več režije Primerjava iteracija : rekurzija (1) • Še o rekurziji – – Terja več režije](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-41.jpg)
![Malo za sprostitev Podano je nekaj zaporedij. Ugotoviti moramo naslednje člene zašporedij. Vsak od Malo za sprostitev Podano je nekaj zaporedij. Ugotoviti moramo naslednje člene zašporedij. Vsak od](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-42.jpg)
![Nedeterministični konstrukti Nedeterminstični konstrukti namenoma ne specificirajo izbire med alternativami. • Ta mehanizem je Nedeterministični konstrukti Nedeterminstični konstrukti namenoma ne specificirajo izbire med alternativami. • Ta mehanizem je](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-43.jpg)
- Slides: 43
![Iteracije in rekurzija Iteracije in rekurzija](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-1.jpg)
Iteracije in rekurzija
![Mehanizmi krmiljenja poteka Zaporedno izvajanje prednost izvedbe izrazov Izbira Selection Mehanizmi krmiljenja poteka • Zaporedno izvajanje ( prednost izvedbe izrazov) • Izbira (Selection) •](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-2.jpg)
Mehanizmi krmiljenja poteka • Zaporedno izvajanje ( prednost izvedbe izrazov) • Izbira (Selection) • Iteracije • Proceduralna abstrakcija • Rekurzija • Konkurenčnost • Nedeterminizem Ta dva krmilna mehanizma dovolita računalniku ponavljanje izvajanja iste množice operacij • • Imperativni jeziki v glavnem temeljijo na iteracijah Funkcionalni jeziki v glavnem temeljijo na rekurziji.
![Kaj je iteracija Iteracija v računalništvu je ponavljanje procesa v računalniškem programu Pri tem Kaj je iteracija? Iteracija v računalništvu je ponavljanje procesa v računalniškem programu. Pri tem](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-3.jpg)
Kaj je iteracija? Iteracija v računalništvu je ponavljanje procesa v računalniškem programu. Pri tem se neko stanje spreminja. Iteracija pomeni stil programiranja v imperativnih programskih jezikih. V nasprotju s tem ima rekurzija bolj deklarativni pristop. Primer iteracije, opisan v imperativni psevdokodi: var i, a : = 0 // initialize a before iteration f For i from 1 to 3 { // loop three times a : = a + i // increment a by the current value of i } print a // the number 6 is printed
![Iteracije Iteracija ima običajno obliko zanke Dve osnovni obliki Iteracija preko oštevilčenih Iteracije Iteracija ima običajno obliko zanke • Dve osnovni obliki: • Iteracija preko oštevilčenih](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-4.jpg)
Iteracije Iteracija ima običajno obliko zanke • Dve osnovni obliki: • Iteracija preko oštevilčenih množic. • Iteracijo krmilimo z logiko (dokler ni izpolnjen nek pogoj) Primeri:
![Primer Fibonaccijeva števila Fibonaccijeva števila tvorijo naslednje zaporedje 1 2 3 5 8 Primer: Fibonaccijeva števila • Fibonaccijeva števila tvorijo naslednje zaporedje 1, 2, 3, 5, 8,](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-5.jpg)
Primer: Fibonaccijeva števila • Fibonaccijeva števila tvorijo naslednje zaporedje 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, … n 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, . . . • Definiramo jih lahko tudi rekurzivno: fib(1) = 1 fib(2) = 1 fib(n) = fib(n – 1) + (fib(n – 2) za n > 2 • To zaporedje je znano tudi kot problem množečih se zajčkov
![Primer plenilci in plen V danem področju imamo množico plenilcev na primer lisic in Primer: plenilci in plen V danem področju imamo množico plenilcev (na primer lisic) in](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-6.jpg)
Primer: plenilci in plen V danem področju imamo množico plenilcev (na primer lisic) in množico plenov (na primer zajčkov). Če ni plenilcev, se zajčki preveč razmnožijo. Če ni plena, plenilci stradajo in izumrejo. Ob dani začetni populaciji uporabimo diferenčne enačbe za simulacijo razvoja obeh populacij. Na primer : Ln+1 = Ln+ (c*Zn- d)* Ln; Zn+1= Zn+ (f- g* Ln)*Zn; L so lisice, Z so zajci. c, d, f, g so parametri. Nastavi začetne vrednosti populacij na Z 0 in L 0
![Populacija Lisic in zajcev Populacija Lisic in zajcev](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-7.jpg)
Populacija Lisic in zajcev
![Lisice in zajci koda zajcev Prej 100 lisic Prej 100 Lisice in zajci : koda zajcev. Prej = 100; lisic. Prej = 100; //](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-8.jpg)
Lisice in zajci : koda zajcev. Prej = 100; lisic. Prej = 100; // zacetna populacija // c, d, f, g so parametri, ki jih moramo nastaviti for (time = t. Min; time <= t. Max; time += step. Size) { lisic = lisic. Prej + (c*zajcev. Prej - d)* lisic. Prej; zajcev = zajcev. Prej + (f- g* lisic. Prej) * zajcev. Prej; // zajcev oziroma lisic ne more biti manj kot nek minimum if (. lisic<10) lisic = 10; if (zajcev<10) zajcev=10; // priprava na nasledno iteracijo zajcev. Prej = zajcev; lisic. Prej = lisic; } Demo
![Primeri rekurzije Primeri rekurzije](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-9.jpg)
Primeri rekurzije
![Rekurzija Do rekurzije pride če metoda kliče samo sebe direktno ali indirektno preko verige Rekurzija Do rekurzije pride, če metoda kliče samo sebe, direktno ali indirektno preko verige](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-10.jpg)
Rekurzija Do rekurzije pride, če metoda kliče samo sebe, direktno ali indirektno preko verige klicev drugih metod. Metoda, ki kliče samo sebe, je rekurzivna metoda.
![Primer Izpis niza void printString str int index if index str length System Primer: Izpis niza void print(String str, int index){ if (index < str. length()){ System.](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-11.jpg)
Primer: Izpis niza void print(String str, int index){ if (index < str. length()){ System. out. print(str. char. At(index)); print(str, index + 1); } } print("Hello", 0); print("Hello", 1); print("Hello", 2); print("Hello", 3); print("Hello", 4); print("Hello", 5); Return Return Hello
![Primer s potenco Definicija potence je X y 1 X X y Primer s potenco Definicija potence je X y = 1* X *…* X (y](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-12.jpg)
Primer s potenco Definicija potence je X y = 1* X *…* X (y krat) Zamislimo si, da bi to morali računati ročno: X = 1* X *…* X (y krat) Kaj, če je y velik? Leni pristop: Imejmo asistenta, ki bo izračunal X y-1 in rezultat je = X * X Imejmo asistenta, ki bo izračunal X y-2 …. . do X 0
![Rekurzivno računanje potence Postopek naj bo naslednji Za izračun potence x na y Če Rekurzivno računanje potence Postopek naj bo naslednji: Za izračun potence x na y ¨Če](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-13.jpg)
Rekurzivno računanje potence Postopek naj bo naslednji: Za izračun potence x na y ¨Če je y enak 0, ni kaj množiti, rezultat je 1. ¨ Če je y večji od 0, tedaj • Prosimo asistenta, da izračuna potenco x na y-1. • Rezultat je x krat rezultat asistenta.
![Rekurzivna metoda private int potencaint x int y int y0 returns xy Rekurzivna metoda private int potenca(int x, int y) { int // y>=0, returns x**y](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-14.jpg)
Rekurzivna metoda private int potenca(int x, int y) { int // y>=0, returns x**y rezultat. Asistenta; if (y==0) return 1; Korak prekinitve mora biti pred rekurzivnim klicem Preveri, če lahko postopek zaključimo brez rekurzije. else { rezultat. Asistenta = potenca(x, y-1); return x*rezultat. Asistenta; } } Rekurzivni klic Argumenti v rekurzivnem klicu morajo določati nalogo, ki je lažja ali manjša od naloge, ki jo je zahteval klicatelj.
![Sledenje klica int z factorial4 4 factorial3 Vrne 32 6 Sledenje klica : int z = factorial(4)= 4 * factorial(3) Vrne 3*2 = 6](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-15.jpg)
Sledenje klica : int z = factorial(4)= 4 * factorial(3) Vrne 3*2 = 6 in konča factorial(3)= factorial(4) končno izračuna 4*6, vrne 24 in konča 3 * lahko factorial(2) Vrne 2*1 =2 factorial(2)= 2 * factorial(1) In konča factorial(1)= 1 * factorial(0) Vrne 1*1 Osnovni primer: factorial(0)= 1 In konča Vrne 1 In konča
![Lastnosti rekurzivnih metod Vse rekurzivne metode imajo naslednje lastnosti Enega ali več osnovnih Lastnosti rekurzivnih metod Vse rekurzivne metode imajo naslednje lastnosti: ¨ Enega ali več osnovnih](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-16.jpg)
Lastnosti rekurzivnih metod Vse rekurzivne metode imajo naslednje lastnosti: ¨ Enega ali več osnovnih primerov (najbolj enostavni primer), ki ga uporabimo za prekinitev rekurzije. ¨ Vsak rekurzivni klic mora originalni problem poenostaviti tako, da bo postopoma bližje osnovnemu primeru, dokler se s tem osnovnim primerom ne izenači.
![Kako načrtujemo rekurzivne metode Korak 1 Bodimo leni Uporabimo rešitev manjše ali lažje verzije Kako načrtujemo rekurzivne metode Korak 1. Bodimo leni. ¨Uporabimo rešitev manjše ali lažje verzije](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-17.jpg)
Kako načrtujemo rekurzivne metode Korak 1. Bodimo leni. ¨Uporabimo rešitev manjše ali lažje verzije problema in z njeno pomočjo rešimo naš problem. ¨Ta korak vodi v rekurzivni klic. Korak 2. Vedeti, kdaj moramo nehati. ¨Vedeti moramo, kdaj je problem tako enostaven, da ga lahko rešimo direktno. ¨Ta korak vodi v kodo prekinitve.
![Primer innverzija niza Funkcija vrne niz v katerem so znaki pomnjeni v obratnem vrstnem Primer: innverzija niza Funkcija vrne niz, v katerem so znaki pomnjeni v obratnem vrstnem](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-18.jpg)
Primer: innverzija niza Funkcija vrne niz, v katerem so znaki pomnjeni v obratnem vrstnem redu. If there are no more characters to examine Return the empty string Else Reverse the rest of the string after the current char Return the concatenation of this result and the char at the current position String reverse(String str, int index){ if (index == str. length()) return ""; else{ String rest = reverse(str, index + 1); return rest + str. char. At(index); } }
![Inverzija niza String reverseString str int index if index str length return Inverzija niza String reverse(String str, int index){ if (index == str. length()) return "";](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-19.jpg)
Inverzija niza String reverse(String str, int index){ if (index == str. length()) return ""; else{ String rest = reverse(str, index + 1); return rest + str. char. At(index); } } reverse("Hello", 0); reverse("Hello", 1); reverse("Hello", 2); reverse("Hello", 3); reverse("Hello", 4); reverse("Hello", 5); Return "" Return "ol" Return "olle" Return "olle. H" H e l l o
![Inverzija niza String reverseString str int index if index str length return Inverzija niza String reverse(String str, int index){ if (index == str. length()) return "";](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-20.jpg)
Inverzija niza String reverse(String str, int index){ if (index == str. length()) return ""; else{ String rest = reverse(str, index + 1); return rest + str. char. At(index); } } reverse("Hello", 0); reverse("Hello", 1); reverse("Hello", 2); reverse("Hello", 3); reverse("Hello", 4); reverse("Hello", 5); Return "" Return "ol" Return "olle" Return "olle. H" H e l l o
![Inverzija niza String reverseString str int index if index str length return Inverzija niza String reverse(String str, int index){ if (index == str. length()) return "";](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-21.jpg)
Inverzija niza String reverse(String str, int index){ if (index == str. length()) return ""; else{ String rest = reverse(str, index + 1); return rest + str. char. At(index); } } reverse("Hello", 0); reverse("Hello", 1); reverse("Hello", 2); reverse("Hello", 3); reverse("Hello", 4); reverse("Hello", 5); Return "" Return "ol" Return "olle" Return "olle. H" H e l l o
![Inverzija niza String reverseString str int index if index str length return Inverzija niza String reverse(String str, int index){ if (index == str. length()) return "";](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-22.jpg)
Inverzija niza String reverse(String str, int index){ if (index == str. length()) return ""; else{ String rest = reverse(str, index + 1); return rest + str. char. At(index); } } reverse("Hello", 0); reverse("Hello", 1); reverse("Hello", 2); reverse("Hello", 3); reverse("Hello", 4); reverse("Hello", 5); Return "" Return "ol" Return "olle" Return "olle. H" H e l l o
![Inverzija niza String reverseString str int index if index str length return Inverzija niza String reverse(String str, int index){ if (index == str. length()) return "";](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-23.jpg)
Inverzija niza String reverse(String str, int index){ if (index == str. length()) return ""; else{ String rest = reverse(str, index + 1); return rest + str. char. At(index); } } reverse("Hello", 0); reverse("Hello", 1); reverse("Hello", 2); reverse("Hello", 3); reverse("Hello", 4); reverse("Hello", 5); Return "" Return "ol" Return "olle" Return "olle. H" H e l l o
![Inverzija niza String reverseString str int index if index str length return Inverzija niza String reverse(String str, int index){ if (index == str. length()) return "";](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-24.jpg)
Inverzija niza String reverse(String str, int index){ if (index == str. length()) return ""; else{ String rest = reverse(str, index + 1); return rest + str. char. At(index); } } reverse("Hello", 0); reverse("Hello", 1); reverse("Hello", 2); reverse("Hello", 3); reverse("Hello", 4); reverse("Hello", 5); Return "" Return "ol" Return "olle" Return "olle. H" H e l l o
![Inverzija niza String reverseString str int index if index str length return Inverzija niza String reverse(String str, int index){ if (index == str. length()) return "";](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-25.jpg)
Inverzija niza String reverse(String str, int index){ if (index == str. length()) return ""; else{ String rest = reverse(str, index + 1); return rest + str. char. At(index); } } reverse("Hello", 0); reverse("Hello", 1); reverse("Hello", 2); reverse("Hello", 3); reverse("Hello", 4); reverse("Hello", 5); Return "" Return "ol" Return "olle" Return "olle. H" H e l l o
![Inverzija niza String reverseString str int index if index str length return Inverzija niza String reverse(String str, int index){ if (index == str. length()) return "";](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-26.jpg)
Inverzija niza String reverse(String str, int index){ if (index == str. length()) return ""; else{ String rest = reverse(str, index + 1); return rest + str. char. At(index); } } reverse("Hello", 0); reverse("Hello", 1); reverse("Hello", 2); reverse("Hello", 3); reverse("Hello", 4); reverse("Hello", 5); Return "" Return "ol" Return "olle" Return "olle. H" H e l l o
![Inverzija niza String reverseString str int index if index str length return Inverzija niza String reverse(String str, int index){ if (index == str. length()) return "";](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-27.jpg)
Inverzija niza String reverse(String str, int index){ if (index == str. length()) return ""; else{ String rest = reverse(str, index + 1); return rest + str. char. At(index); } } reverse("Hello", 0); reverse("Hello", 1); reverse("Hello", 2); reverse("Hello", 3); reverse("Hello", 4); reverse("Hello", 5); Return "" Return "ol" Return "olle" Return "olle. H" H e l l o
![Inverzija niza String reverseString str int index if index str length return Inverzija niza String reverse(String str, int index){ if (index == str. length()) return "";](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-28.jpg)
Inverzija niza String reverse(String str, int index){ if (index == str. length()) return ""; else{ String rest = reverse(str, index + 1); return rest + str. char. At(index); } } reverse("Hello", 0); reverse("Hello", 1); reverse("Hello", 2); reverse("Hello", 3); reverse("Hello", 4); reverse("Hello", 5); Return "" Return "ol" Return "olle" Return "olle. H" H e l l o
![Inverzija niza String reverseString str int index if index str length return Inverzija niza String reverse(String str, int index){ if (index == str. length()) return "";](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-29.jpg)
Inverzija niza String reverse(String str, int index){ if (index == str. length()) return ""; else{ String rest = reverse(str, index + 1); return rest + str. char. At(index); } } reverse("Hello", 0); reverse("Hello", 1); reverse("Hello", 2); reverse("Hello", 3); reverse("Hello", 4); reverse("Hello", 5); Return "" Return "ol" Return "olle" Return "olle. H" H e l l o
![Inverzija niza String reverseString str int index if index str length return Inverzija niza String reverse(String str, int index){ if (index == str. length()) return "";](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-30.jpg)
Inverzija niza String reverse(String str, int index){ if (index == str. length()) return ""; else{ String rest = reverse(str, index + 1); return rest + str. char. At(index); } } reverse("Hello", 0); reverse("Hello", 1); reverse("Hello", 2); reverse("Hello", 3); reverse("Hello", 4); reverse("Hello", 5); Return "" Return "ol" Return "olle" Return "olle. H" H e l l o
![Hanojski stolpiči Problem s Hanojskimi stolpiči je klasičen rekurzivni problem ki temelji na preprosti Hanojski stolpiči Problem s Hanojskimi stolpiči je klasičen rekurzivni problem, ki temelji na preprosti](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-31.jpg)
Hanojski stolpiči Problem s Hanojskimi stolpiči je klasičen rekurzivni problem, ki temelji na preprosti igri. Imamo tri palice. Na eni je sklad ploščic z različnimi premeri. Cilj igre: Prestaviti vse ploščice na desno palico ob upoštevanju naslednjih pravil: • Nobena ploščica ne sme biti nikoli na vrhu manjše ploščice. • Naenkrat smemo premikati le po eno ploščico. • Vsako ploščico moramo vedno odložiti na eno od palic, nikoli ob strani. • Premaknemo lahko vedno le ploščico, ki je na vrhu nekega stolpiča. Zgodba pravi, da bi za fizičen premik 64 ploščic iz ene palice na drugo potrebovali toliko časa, da bi prej bil konec sveta. Demo
![N ploščic s stolpa 1 na stolp 3 Začetno stanje Stolp 1 Stolp 2 N ploščic s stolpa 1 na stolp 3 Začetno stanje: Stolp 1 Stolp 2](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-32.jpg)
N ploščic s stolpa 1 na stolp 3 Začetno stanje: Stolp 1 Stolp 2 Stolp 3 Cilj: Stolp 1 Stolp 2 Stolp 3
![Nekaj prvih korakov Korak 1 Korak 2 Premik n1 ploščic Stolp 1 Stolp 2 Nekaj prvih korakov Korak 1: Korak 2: Premik n-1 ploščic Stolp 1 Stolp 2](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-33.jpg)
Nekaj prvih korakov Korak 1: Korak 2: Premik n-1 ploščic Stolp 1 Stolp 2 Stolp 3 Premik 1 ploščice Stolp 1 Korak 3: Stolp 2 Stolp 3 Premik n-1 ploščic Stolp 1 Stolp 2 Stolp 3
![Koda v pascalu procedure Hanoin integer from to by char Begin if n1 then Koda v pascalu procedure Hanoi(n: integer; from, to, by: char); Begin if (n=1) then](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-34.jpg)
Koda v pascalu procedure Hanoi(n: integer; from, to, by: char); Begin if (n=1) then writeln('Move the plate from ', from, ' to ', to) else begin Hanoi(n-1, from, by, to); Hanoi(1, from, to, by); Hanoi(n-1, by, to, from); end; End;
![Koda v javi bolj popolna public class Towers Of Hanoi public static void Koda v javi (bolj popolna) public class Towers. Of. Hanoi { public static void](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-35.jpg)
Koda v javi (bolj popolna) public class Towers. Of. Hanoi { public static void main(String[] args) { move. Disks(3, "Tower 1", "Tower 3", "Tower 2"); } public static void move. Disks(int n, String from. Tower, String to. Tower, String aux. Tower) { if (n == 1) System. out. println("Move disk " + n + " from " + from. Tower + " to " + to. Tower); else Move n-1 disks from { from to temp, using move. Disks(n-1, from. Tower, aux. Tower, to. Tower); to as a temporary. System. out. println("Move disk " + n + " from " + from. Tower + " to " + to. Tower); move. Disks(n-1, aux. Tower, to. Tower, from. Tower); } Move one disk from to to. } } Move n-1 disks from temp to to, using from as a temporary.
![Kakšen bi bil izpis Move disk 1 from Tower 1 to Tower 3 Move Kakšen bi bil izpis Move disk 1 from Tower 1 to Tower 3 Move](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-36.jpg)
Kakšen bi bil izpis Move disk 1 from Tower 1 to Tower 3 Move disk 2 from Tower 1 to Tower 2 Move disk 1 from Tower 3 to Tower 2 Move disk 3 from Tower 1 to Tower 3 Move disk 1 from Tower 2 to Tower 1 Move disk 2 from Tower 2 to Tower 3 Move disk 1 from Tower 1 to Tower 3
![Primer s fraktali Demo Primer s fraktali Demo](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-37.jpg)
Primer s fraktali Demo
![Preproga Sierpinski import java applet Applet import java awt import java awt event Preproga Sierpinski import java. applet. Applet; import java. awt. *; import java. awt. event.](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-38.jpg)
Preproga Sierpinski import java. applet. Applet; import java. awt. *; import java. awt. event. *; public class Sierpinski. Carpet extends Applet { int level; public void init() { repaint(); } public synchronized void paint(Graphics g){ int i = get. Size(). width; int j = get. Size(). height; g. set. Color(Color. white); g. fill. Rect(0, 0, i, j); level = 5; carpet(g, level, 0, 0, i, j); }
![Preproga Sierpinski nadaljevanje public void carpetGraphics g int i int j int k int Preproga Sierpinski (nadaljevanje) public void carpet(Graphics g, int i, int j, int k, int](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-39.jpg)
Preproga Sierpinski (nadaljevanje) public void carpet(Graphics g, int i, int j, int k, int l, int i 1){ if(i == 0) { g. set. Color(Color. black); g. fill. Rect(j, k, l, i 1); return; } else { int j 1 = l / 3; int k 1 = i 1 / 3; carpet(g, i - 1, j, k, j 1, k 1); carpet(g, i - 1, j + j 1, k, j 1, k 1); carpet(g, i - 1, j + 2 * j 1, k, j 1, k 1); carpet(g, i - 1, j, k + k 1, j 1, k 1); carpet(g, i - 1, j + 2 * j 1, k + k 1, j 1, k 1); carpet(g, i - 1, j, k + 2 * k 1, j 1, k 1); carpet(g, i - 1, j + j 1, k + 2 * k 1, j 1, k 1); carpet(g, i - 1, j + 2 * j 1, k + 2 * k 1, j 1, k 1); return; } } }
![Primerjava iteracija rekurzija 1 Iteracija Uporabljamo strukture ponavljanja for while Primerjava iteracija : rekurzija (1) • Iteracija – – Uporabljamo strukture ponavljanja (for, while](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-40.jpg)
Primerjava iteracija : rekurzija (1) • Iteracija – – Uporabljamo strukture ponavljanja (for, while ali do…while) Ponavljanje skozi eksplicitno uporabo struktur ponavljanja Konča se, ko pogoj za ponavljanje zanke ne velja več (običajno) ponavljanja krmilimo s števcem • Rekurzija – – Uporabljamo strukture izbiranja(if, if…else ali switch) Ponavljanje skozi ponovne klice metod oziroma funkcij Konča se, ko je izpolnjen osnovni primer Ponavljanje krmilimo z deljenjem problema na bolj enostavnega
![Primerjava iteracija rekurzija 1 Še o rekurziji Terja več režije Primerjava iteracija : rekurzija (1) • Še o rekurziji – – Terja več režije](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-41.jpg)
Primerjava iteracija : rekurzija (1) • Še o rekurziji – – Terja več režije kot iteracija Je pomnilniško bolj zahtevna od iteracije Rekurzivne probleme lahko rešujemo tudi z iteracijami Pogosto nam za rekurzijo zadošča le nekaj vrstic kode
![Malo za sprostitev Podano je nekaj zaporedij Ugotoviti moramo naslednje člene zašporedij Vsak od Malo za sprostitev Podano je nekaj zaporedij. Ugotoviti moramo naslednje člene zašporedij. Vsak od](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-42.jpg)
Malo za sprostitev Podano je nekaj zaporedij. Ugotoviti moramo naslednje člene zašporedij. Vsak od navedenih problemov ima dva odgovora: eden je jasen, drugi pa bolj skrit. Problem A: 3, 1, 4, 1, 5, … Kateri je naslednji člen zaporedja? Problem B: 2, 3, 5, 8, … Kateri je naslednji člen zaporedja? Problem C: 2, 7, 1, 8, 2, 8, 1, 8, … Katera sta dva naslednja člena zaporedja? Odgovori A: preprosto = 1; Odgovori B: preprosto = 12; Odgovori C: preprosto =(2, 9); skrito = 9; skrito = 13; skrito = (2, 8);
![Nedeterministični konstrukti Nedeterminstični konstrukti namenoma ne specificirajo izbire med alternativami Ta mehanizem je Nedeterministični konstrukti Nedeterminstični konstrukti namenoma ne specificirajo izbire med alternativami. • Ta mehanizem je](https://slidetodoc.com/presentation_image_h2/09093b99bd4be6c5a60ab31ec795a769/image-43.jpg)
Nedeterministični konstrukti Nedeterminstični konstrukti namenoma ne specificirajo izbire med alternativami. • Ta mehanizem je posebno uporaben v konkurenčnih programih