Rekursiivsed algoritmid 1 lesanne Algoritm Programm 2 lesanne


![Ülesanne: leida antud lõigul [i; j] asuvate naturaalarvude korrutis (i ja j on naturaalarvud). Ülesanne: leida antud lõigul [i; j] asuvate naturaalarvude korrutis (i ja j on naturaalarvud).](https://slidetodoc.com/presentation_image_h/e1588e71d79b392f88b4f1d945c8d47a/image-3.jpg)







![Ülesanne: leida antud lõigul [i; j] asuvate naturaalarvude korrutis (i ja j on naturaalarvud). Ülesanne: leida antud lõigul [i; j] asuvate naturaalarvude korrutis (i ja j on naturaalarvud).](https://slidetodoc.com/presentation_image_h/e1588e71d79b392f88b4f1d945c8d47a/image-11.jpg)





![Ülesanne: leida antud lõigul [i; j] asuvate naturaalarvude korrutis (i ja j on naturaalarvud). Ülesanne: leida antud lõigul [i; j] asuvate naturaalarvude korrutis (i ja j on naturaalarvud).](https://slidetodoc.com/presentation_image_h/e1588e71d79b392f88b4f1d945c8d47a/image-17.jpg)
![ALGORITM Ülesanne: leida “pooleks lõikamisega” antud lõigul [i; j] korrutis(i, j) asuvate naturaal--- Antud: ALGORITM Ülesanne: leida “pooleks lõikamisega” antud lõigul [i; j] korrutis(i, j) asuvate naturaal--- Antud:](https://slidetodoc.com/presentation_image_h/e1588e71d79b392f88b4f1d945c8d47a/image-18.jpg)






- Slides: 24
Rekursiivsed algoritmid 1
Ülesanne Algoritm Programm 2
Ülesanne: leida antud lõigul [i; j] asuvate naturaalarvude korrutis (i ja j on naturaalarvud). Konkreetne ülesanne: lõik on [3; 6], teguriteks on arvud 3, 4, 5 ja 6. Vastus: 360 Konkreetne ülesanne: lõik on [13; 21], teguriteks on arvud 13, 14, 15, 16, 17, 18, 19, 20, 21. Vastus: 106661318400 Konkreetne ülesanne: lõik on [3; 3], ainukeseks “teguriks” on arv 3. Vastus: 3 Konkreetne ülesanne: lõik on [3; 2] (tühi), tegureid ei ole. Vastus: 1 3
PROGRAMM ALGORITM long korrutis(int i, int j){ korrutis(i, j) // Antud: naturaalarvud i, j // Tulemus: tagastatakse // korrutis i×(i+1) × …× j ---Antud: naturaalarvud i, j ---Tulemus: tagastatakse --- korrutis i×(i+1) × …× j long tulem = 1; while(i <= j){ tulem = tulem * i; i++; }//while return tulem; }//korrutis t : = 1; k : = i k j? t : = t × k k : = k + 1 (t) 4
Algoritm: • tegevusplaan ülesande lahendamiseks teatavate lihtsamate operatsioonide teostamise teel; • ülesande lahendamise skeem; • ülesande lahendamiskäigu kirjeldus. Programm: kindlale täitjale (arvutile) orienteeritud tegevuseeskiri ülesande lahendamiseks, tavaliselt mingi algoritmi realisatsioon (seade arvutile). 5
Ülesanne Konkreetne ülesanne (1) Konkreetne ülesanne (2) Konkreetne ülesanne (3). . . Algoritm . . . Programm Algoritm’ . . . Programm. . . Täpne ülesande seade, lahenduskava, ülesande püstitus lahenduse idee Täpne eeskiri arvutile, algor. realisatsioon 6
ALGORITM PROGRAMM korrutis(i, j) ---Antud: naturaalarvud i, j ---Tulemus: tagastatakse --- korrutis i×(i+1) × …× j t : = 1; k : = i k j? t : = t × k k : = k + 1 (t) 7
korrutis(i, j) ---Antud: naturaalarvud i, j ---Tulemus: tagastatakse --- korrutis i×(i+1) × …× j t : = 1; k : = i k j? t : = t × k k : = k + 1 (t) long korrutis(int i, int j) throws Illegal. Argument. Exception{ // Antud: naturaalarvud i, j // Tulemus: tagastatakse // korrutis i×(i+1) × …× j if(i < 1 || j < 1) throw new Illegal. Argument. Exception(); long tulem = 1; while(i <= j){ tulem *= i++; }//while return tulem; }//korrutis 8
korrutis(i, j) long korrutis(int i, int j) { ---Antud: naturaalarvud i, j ---Tulemus: tagastatakse // Antud: naturaalarvud i, j // Tulemus: tagastatakse // korrutis i×(i+1) × …× j --- korrutis i×(i+1) × …× j t : = 1; k : = i k j? t : = t × k k : = k + 1 (t) long tulem = 1; for(; i <= j; i++){ tulem *= i; }//for return tulem; }//korrutis 9
korrutis(i, j) ---Antud: naturaalarvud i, j ---Tulemus: tagastatakse --- korrutis i×(i+1) × …× j t : = 1; k : = i k j? t : = t × k k : = k + 1 (t) Big. Integer korrutis(int i, int j) { // Antud: naturaalarvud i, j // Tulemus: tagastatakse // korrutis i×(i+1) × …× j Big. Integer tulem = new Big. Integer(“ 1”); for(; i <= j; i++){ tulem = tulem. multiply( new Big. Integer( new Integer(i). to. String())); }//for return tulem; 10 }//korrutis
Ülesanne: leida antud lõigul [i; j] asuvate naturaalarvude korrutis (i ja j on naturaalarvud). ALGORITM korrutis(i, j) --- Antud: naturaalarvud i, j --- Tulemus: tagastatakse --korrutis i×(i+1) × …× j t : = 1; k : = j i > k? t : = t × k k : = k - 1 i k? t : = t × k k : = k - 1 (t) 11
Ülesanne: viilutada antud päts. ALGORITM viilutada(p) --- Antud: päts p --- Tulemus: päts p viilutatud, --viilud pandud kasti p paksus 1 cm? panna p kasti lõigata pätsi p paremast otsast viil, panna see kasti 12
Ülesanne: lõhkuda antud pakk. ALGORITM lõhkuda(p) --- Antud: pakk p --- Tulemus: pakk p lõhutud, --halud pandud kasti p paksus 15 cm? panna p kasti lüüa paku p paremast küljest halg, panna see kasti 13
Ülesanne: lõhkuda antud pakk. ALGORITM lõhkuda(p) --- Antud: pakk p --- Tulemus: pakk p lõhutud, --halud pandud kasti p paksus 15 cm? panna p kasti rekursiivne rakendus lüüa pakk p pooleks kaheks pakuks p 1 ja p 2; lõhkuda(p 1); lõhkuda(p 2) 14
Ülesanne: viilutada antud päts. ALGORITM viilutada(p) --- Antud: päts p --- Tulemus: päts p viilutatud, --viilud pandud kasti p paksus 1 cm? panna p kasti rekursiivne rakendus lõigata päts p pooleks kaheks pätsiks p 1 ja p 2; viilutada(p 1); viilutada(p 2) 15
Ülesanne: viilutada antud päts. ALGORITM viilutada(p) --- Antud: päts p --- Tulemus: päts p viilutatud, --viilud pandud kasti p paksus 1 cm? panna p kasti rekursiivne rakendus lõigata päts p kaheks pätsiks p 1 ja viiluks, viil panna kasti; viilutada(p 1) 16
Ülesanne: leida antud lõigul [i; j] asuvate naturaalarvude korrutis (i ja j on naturaalarvud). ALGORITM “otsast lõikamisega” korrutis(i, j) --- Antud: naturaalarvud i, j --- Tulemus: tagastatakse --korrutis i×(i+1) × …× j i > j? (1) k : = korrutis(i+1, j) (i × korrutis(i+1, j)) t : = i×k (t) 17
ALGORITM Ülesanne: leida “pooleks lõikamisega” antud lõigul [i; j] korrutis(i, j) asuvate naturaal--- Antud: naturaalarvud i, j arvude korrutis (i ja j on naturaal- --- Tulemus: tagastatakse --korrutis i×(i+1) × …× j arvud). n : = j - i + 1; --- tegurite arv n 0? (1) --- tegureid ei ole n = 1? (i) --- on üks tegur k : = (korrutis(i, i+k-1)×korrutis(i+k, j)) 18
PROGRAMM // “pooleks lõikamisega” PROGRAMM // “otsast lõikamisega” long korrutis(int i, int j){ // Antud: naturaalarvud i, j // Tulemus: tagastatakse // korrutis i×(i+1) × …× j int n = j - i + 1; if(i > j) return 1; if(n <= 0) return 1; if(n == 1) return i; return k = n/2; i*korrutis(i+1, j); return korrutis(i, i+k-1)* korrutis(i+k, j)); }//korrutis 19
ALGORITM Ülesanne: leida antud mitte- faktoriaal(n) negatiivse täisarvu faktoriaal. --- Antud: mittenegat. täisarv n --- Tulemus: tagastatakse n! Definitsioon 1. --- Alamalgoritm: korrutis( ) Naturaalarvu n faktoriaal n = 0? n! = 1× 2×. . . ×n. (1) Arvu 0 faktoriaal 0! = 1. (korrutis(1, n)) 20
Ülesanne: leida antud mittenegatiivse täisarvu faktoriaal. Definitsioon 2. Mittenegatiivse täisarvu n faktoriaal n!: a) kui n = 0, siis n! = 1; b) kui n > 0, siis n! = (n-1)! × n. ALGORITM faktoriaal(n) --- Antud: mittenegat. täisarv n --- Tulemus: tagastatakse n! n = 0? (1) (faktoriaal(n-1) × n) 21
ALGORITM hanoi(a, b, c, n) a b c --- Antud: platsid a, b ja c; --- n - tõstetavate ketaste arv --- Tulemus: n pealmist ketast --- platsilt a tõstetud platsile b (pealmisteks) --- kasutades platsi c laoplatsina hanoi(a, c, b, n-1) tõsta üks ketas platsilt a platsile b hanoi(c, b, a, n-1) 22
class Hanoi{ static void hanoi(int a, int b, int c, int n){ if(n == 0) return; hanoi(a, c, b, n-1); System. out. print(” ” + a + "-->" + b); hanoi(c, b, a, n-1); } public static void main(String[ ] a){ hanoi(1, 2, 3, 4); } }//Hanoi 1 -->3 1 -->2 3 -->2 1 -->3 2 -->1 2 -->3 1 -->2 3 -->1 2 -->1 3 -->2 1 -->3 1 -->2 3 -->2 23
24