Technologie Informatyczne Wykład VII A. Matuszak (1) 22 listopada 2007 A. Matuszak (1) Technologie Informatyczne Wykład VII A. Matuszak (2) Technologie Informatyczne Wykład VII
(Rekursja) albo rekursja (ang. recursion, z łac. recurrere, przybiec z powrotem) to w programowaniu i w matematyce odwoływanie się funkcji (sformułowania) do samej siebie. A. Matuszak (3) Technologie Informatyczne Wykład VII Matematyka Ciąg geometryczny Silnia x n = k x n 1 n! = 1 2 n 1 n n! = n (n 1)! A. Matuszak (4) Technologie Informatyczne Wykład VII
Programowanie rekurencyjne function y=silnia(n) if (n==0) (n==1)) y=1; else y= n*silnia(n-1); endif endfunction A. Matuszak (5) Technologie Informatyczne Wykład VII x n x n = x 0 = 1 x p 1 = x p x 2p+1 = x x 2p x 2p = (x x) p wykładnik liczba potęgi mnożeń 1 2 10 6 100 10 1000 16 10000 19 A. Matuszak (6) Technologie Informatyczne Wykład VII
Stos 2 5 8 1 4 2 2 2 4 A. Matuszak (7) Technologie Informatyczne Wykład VII Ciąg Fibonacciego F (n) = F (0) = 1 F (1) = 1 F (n) = F (n 1) + F (n 2) A. Matuszak (8) Technologie Informatyczne Wykład VII
function y=ifibb(n) foo=1; fo=1; f=1; for i=2:n f=foo+fo; foo=fo; fo=f; endfor y=f; endfunction function y=rfibb(n) if (n<2) y=1; else y=rfibb(n-1)+rfibb(n-2); endif endfunction A. Matuszak (9) Technologie Informatyczne Wykład VII Każde zadanie sformułowne rekurencyjnie można zaprogramować iteracyjnie i na odwrót A. Matuszak (10) Technologie Informatyczne Wykład VII
Gotowanie jajek na miękko weż czysty garnek włóż potrzebną ilość jajek nalej zimnej wody, tak aby przykryła jajka postaw na kuchence zaczekaj, aż woda zcznie wrzeć od momentu wrzenia gotuj jeszcze 2.5 minuty wyjmij jajka, ochłodź w zimnej wodzie jajka są gotowe do jedzenia A. Matuszak (11) Technologie Informatyczne Wykład VII Ciąg instrukcji, operacji 1: weź czysty garnek 2: włóż potrzebną ilość jajek 3: nalej zimnej wody, tak aby przykryła jajka 4: 1: b 2 4ac 2: x 1 b 2a 3: x 2 b+ 2a 4: 1: 2: Znajdź najmniejszy pierwiastek równania kwadratowego 3: A. Matuszak (12) Technologie Informatyczne Wykład VII
Schemat Hornera a n x n + a n 1 x n 1 + + a 2 x 2 + a 1 x + a 0 = ( ((a n x + a n 1 ) x + a n 2 ) x + + a 1 ) x + a 0 A. Matuszak (13) Technologie Informatyczne Wykład VII Wyszukiwanie binarne Zgadnij liczbę z przedziału 1...100 A. Matuszak (14) Technologie Informatyczne Wykład VII
Wyszukiwanie binarne 1: Wyszukiwanie binarne(d,g,s) 2: while g d > 0 do 3: p (g+d)/2 4: if p > s then 5: g p 6: else 7: d p 8: end if 9: end while 27 [1 5 17 35 62 151] A. Matuszak (15) Technologie Informatyczne Wykład VII Sortowanie proste przez scalanie [ 151 5 77 35 12 15 ] [ 5 151 77 35 12 15 ] [ 5 12 77 35 151 15 ] A. Matuszak (16) Technologie Informatyczne Wykład VII
Euklidesa (NWD) 1: Euklides(a,b) 2: 3: r (a mod b) 4: while r > 0 do 5: a b 6: b r 7: r (a mod b) 8: end while 9: Wynik: b A. Matuszak (17) Technologie Informatyczne Wykład VII Instrukcja warunkowa 1: b 2 4ac 2: if < 0 then 3: brak pierwiastków rzeczywistych 4: end if 5: if 0 then 6: x 1 b 2a 7: x 2 b+ 2a 8: end if A. Matuszak (18) Technologie Informatyczne Wykład VII
Pętle 1: while lim x 0 f (x) ɛ do 2: 3: end while 4: 5: repeat 6: 7: until warunek 8: 9: for i = 1 do n co 5 do 10: 11: end for A. Matuszak (19) Technologie Informatyczne Wykład VII while warunek do if przypadek A then else repeat until kryterium end if end while for i = 1 do n co 5 do end for A. Matuszak (20) Technologie Informatyczne Wykład VII
A. Matuszak (21) Technologie Informatyczne Wykład VII A. Matuszak (22) Technologie Informatyczne Wykład VII
A. Matuszak (23) Technologie Informatyczne Wykład VII A. Matuszak (24) Technologie Informatyczne Wykład VII
Zadanie z kulami Dane jest n kul identycznych co do wyglądu, z których dokładnie jedna lżejsza niż pozostałe. Mamy do dyspozycji wagę szalkową. Znaleźć lżejszą kulę używając najmniejszej możliwej liczby ważeń. A. Matuszak (25) Technologie Informatyczne Wykład VII Iloczyn skalarny wektorów [a 1 a 2 a n ] [b 1 b 2 b n ] T n mnożeń i n 1 dodawań A. Matuszak (26) Technologie Informatyczne Wykład VII