Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałTobiasz Smolarczyk Został zmieniony 11 lat temu
1
Rekurencja Copyright, 2001 © Jerzy R. Nawrocki Jerzy.Nawrocki@put.poznan.pl http://www.cs.put.poznan.pl/~nawrocki/ics/ Wprowadzenie do informatyki Wykład 8
2
J.Nawrocki, Rekursja Plan wykładu Wprowadzenie Składanie funkcji Definiowanie indukcyjne: 1 zmienna Definiowanie indukcyjne: 2 zmienne Rekursja i zmienne rzeczywiste Usuwanie rekursji Operacja minimum
3
J.Nawrocki, Rekursja Wprowadzenie Tylko funkcje określone na zbiorze liczb naturalnych i o wartościach naturalnych 5 + 3 5 * 3 5 mod 3 5 3 ln 5 5 e 3 + 3 Funkcje rekurencyjne
4
J.Nawrocki, Rekursja Plan wykładu Wprowadzenie Składanie funkcji Definiowanie indukcyjne: 1 zmienna Definiowanie indukcyjne: 2 zmienne Rekursja i zmienne rzeczywiste Usuwanie rekursji Operacja minimum
5
J.Nawrocki, Rekursja Składanie funkcji Nieparz(n)= 2*n + 1 Plus(a,b) = a + b Razy(a,b) = a * b Nieparz(n)= Plus(Razy(2,n), 1) Ujęcie matematyczne
6
J.Nawrocki, Rekursja Składanie funkcji var n: integer; begin read(n); writeln(2*n+1) end. Prosty program w Pascalu
7
J.Nawrocki, Rekursja Składanie funkcji function Plus(a,b: integer): integer; begin Plus:= a + b end; function Razy(a,b: integer): integer; begin Razy:= a * b end; var n: integer; begin read(n); writeln(Plus(Razy(2,n),1)) end. Program pascalowy z funkcjami
8
J.Nawrocki, Rekursja Składanie funkcji function Plus(a,b: integer): integer; begin Plus:= a + b end; function Razy(a,b: integer): integer; begin Razy:= a * b end; var n: integer; begin read(n); writeln(Plus(Razy(2,n),1)) end. n 3 WeWy Program pascalowy z funkcjami
9
J.Nawrocki, Rekursja Składanie funkcji function Plus(a,b: integer): integer; begin Plus:= a + b end; function Razy(a,b: integer): integer; begin Razy:= a * b end; var n: integer; begin read(n); writeln(Plus(Razy(2,n),1)) end. n 3 3 WeWy Program pascalowy z funkcjami
10
J.Nawrocki, Rekursja Składanie funkcji function Plus(a,b: integer): integer; begin Plus:= a + b end; function Razy(a,b: integer): integer; begin Razy:= a * b end; var n: integer; begin read(n); writeln(Plus(Razy(2,n),1)) end. n 3 3 WeWy x:=Razy(2,n) y:=Plus(x,1) writeln(y) Program pascalowy z funkcjami x y
11
J.Nawrocki, Rekursja Składanie funkcji function Plus(a,b: integer): integer; begin Plus:= a + b end; function Razy(a,b: integer): integer; begin Razy:= a * b end; var n: integer; begin read(n); writeln(Plus(Razy(2,n),1)) end. n 3 3 WeWy x:=Razy(2,n) y:=Plus(x,1) writeln(y) Program pascalowy z funkcjami x y
12
J.Nawrocki, Rekursja Składanie funkcji function Plus(a,b: integer): integer; begin Plus:= a + b end; function Razy(a,b: integer): integer; begin Razy:= a * b end; var n: integer; begin read(n); writeln(Plus(Razy(2,n),1)) end. n 3 3 WeWy x:=Razy(2,n) y:=Plus(x,1) writeln(y) Program pascalowy z funkcjami x 6 y
13
J.Nawrocki, Rekursja Składanie funkcji function Plus(a,b: integer): integer; begin Plus:= a + b end; function Razy(a,b: integer): integer; begin Razy:= a * b end; var n: integer; begin read(n); writeln(Plus(Razy(2,n),1)) end. n 3 3 WeWy x:=Razy(2,n) y:=Plus(x,1) writeln(y) Program pascalowy z funkcjami x 6 y
14
J.Nawrocki, Rekursja Składanie funkcji function Plus(a,b: integer): integer; begin Plus:= a + b end; function Razy(a,b: integer): integer; begin Razy:= a * b end; var n: integer; begin read(n); writeln(Plus(Razy(2,n),1)) end. n 3 3 WeWy x:=Razy(2,n) y:=Plus(x,1) writeln(y) Program pascalowy z funkcjami x 6 y 7
15
J.Nawrocki, Rekursja Składanie funkcji function Plus(a,b: integer): integer; begin Plus:= a + b end; function Razy(a,b: integer): integer; begin Razy:= a * b end; var n: integer; begin read(n); writeln(Plus(Razy(2,n),1)) end. n 3 3 WeWy x:=Razy(2,n) y:=Plus(x,1) writeln(y) Program pascalowy z funkcjami x 6 y 7
16
J.Nawrocki, Rekursja Składanie funkcji function Plus(a,b: integer): integer; begin Plus:= a + b end; function Razy(a,b: integer): integer; begin Razy:= a * b end; var n: integer; begin read(n); writeln(Plus(Razy(2,n),1)) end. n 3 3 We 7 Wy x:=Razy(2,n) y:=Plus(x,1) writeln(y) Program pascalowy z funkcjami x 6 y 7
17
J.Nawrocki, Rekursja Plan wykładu Wprowadzenie Składanie funkcji Definiowanie indukcyjne: 1 zmienna Definiowanie indukcyjne: 2 zmienne Rekursja i zmienne rzeczywiste Usuwanie rekursji Operacja minimum
18
J.Nawrocki, Rekursja Definiowanie indukcyjne: 1 zmienna Definiowanie indukcyjne (rekursja / rekurencja): definiujemy nieznane przez nieznane, które będzie znane Wprowadzenie Masło maślane
19
J.Nawrocki, Rekursja Definiowanie indukcyjne: 1 zmienna n! = 1*2*3*.. *(n-1)*n Silnia(0)= 1 Silnia(n)= Silnia(n-1) * n = n * Silnia(n-1) f(0)= k f(n)= h(n-1, f(n-1)) Ujęcie matematyczne
20
J.Nawrocki, Rekursja Definiowanie indukcyjne: 1 zmienna n! = 1*2*3*.. *(n-1)*n Silnia(0)= 1 Silnia(n)= Silnia(n-1) * n = n * Silnia(n-1) f(0)= k f(n)= h(n-1, f(n-1)) Ujęcie matematyczne f Silnia k = 1 h(x, y)= (x+1) * y h(n-1, Silnia(n-1))= (n-1+1) * Silnia(n-1)
21
J.Nawrocki, Rekursja Silnia(0)= 1 Silnia(n)= n * Silnia(n-1) Program w Pascalu function S(n: integer): integer; begin if n=0 then S:= 1 else S:= n * S(n-1) end; var n: integer; begin read(n); writeln( S(n) ) end. Definiowanie indukcyjne: 1 zmienna
22
J.Nawrocki, Rekursja Program w Pascalu function S(n: integer): integer; begin if n=0 then S:= 1 else S:= n * S(n-1) end; var n: integer; begin read(n); writeln( S(n) ) end. Definiowanie indukcyjne: 1 zmienna Zmienić S na Silnia
23
J.Nawrocki, Rekursja Definiowanie indukcyjne: 1 zmienna Program w Pascalu function S(n: integer): integer; begin if n=0 then S:= 1 else S:= n * S(n-1) end; var n: integer; begin read(n); writeln( S(n) ) end. A jak damy -1 ?
24
J.Nawrocki, Rekursja Definiowanie indukcyjne: 1 zmienna Program w Pascalu function S(n: integer): integer; begin if n<=0 then S:= 1 else S:= n * S(n-1) end; var n: integer; begin read(n); writeln( S(n) ) end. A jak damy -1 ?
25
J.Nawrocki, Rekursja Definiowanie indukcyjne: 1 zmienna Program w Pascalu function S(n: integer): integer; begin if n<=0 then S:= 1 else S:= n * S(n-1) end; var n: integer; begin read(n); writeln( S(n) ) end. n 3 WeWy
26
J.Nawrocki, Rekursja Definiowanie indukcyjne: 1 zmienna Program w Pascalu function S(n: integer): integer; begin if n<=0 then S:= 1 else S:= n * S(n-1) end; var n: integer; begin read(n); writeln( S(n) ) end. n 3 3 WeWy
27
J.Nawrocki, Rekursja Definiowanie indukcyjne: 1 zmienna Program w Pascalu function S(n: integer): integer; begin if n<=0 then S:= 1 else S:= n * S(n-1) end; var n: integer; begin read(n); writeln( S(n) ) end. n 3 3 WeWy
28
J.Nawrocki, Rekursja Definiowanie indukcyjne: 1 zmienna function S(n: integer):integ begin if n<=0 then S:= 1 else S:= n * S(n-1) end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n<=0 then S:= 1 else S:= n * S(n-1)
29
J.Nawrocki, Rekursja Definiowanie indukcyjne: 1 zmienna function S(n: integer):integ begin if n<=0 then S:= 1 else S:= n * S(n-1) end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n<=0 then S:= 1 else S:= n * S(n-1) S(n-1) S: n=2 if n<=0 then S:= 1 else S:= n * S(n-1)
30
J.Nawrocki, Rekursja Definiowanie indukcyjne: 1 zmienna function S(n: integer):integ begin if n<=0 then S:= 1 else S:= n * S(n-1) end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n<=0 then S:= 1 else S:= n * S(n-1) S(n-1) S: n=2 if n<=0 then S:= 1 else S:= n * S(n-1) S(n-1) S: n=1 if n<=0 then S:= 1 else S:= n * S(n-1)
31
J.Nawrocki, Rekursja Definiowanie indukcyjne: 1 zmienna function S(n: integer):integ begin if n<=0 then S:= 1 else S:= n * S(n-1) end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n<=0 then S:= 1 else S:= n * S(n-1) S(n-1) S: n=2 if n<=0 then S:= 1 else S:= n * S(n-1) S: n=1 if n<=0 then S:= 1 else S:= n * S(n-1) S(n-1) S: n=0 if n<=0 then S:= 1 else S:= n * S(n-1)
32
J.Nawrocki, Rekursja Definiowanie indukcyjne: 1 zmienna function S(n: integer):integ begin if n<=0 then S:= 1 else S:= n * S(n-1) end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n<=0 then S:= 1 else S:= n * S(n-1) S(n-1) S: n=2 if n<=0 then S:= 1 else S:= n * S(n-1) S: n=1 if n<=0 then S:= 1 else S:= n * S(n-1) S(n-1) S: n=0 if n<=0 then S:= 1 else S:= n * S(n-1)
33
J.Nawrocki, Rekursja Definiowanie indukcyjne: 1 zmienna function S(n: integer):integ begin if n<=0 then S:= 1 else S:= n * S(n-1) end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n<=0 then S:= 1 else S:= n * S(n-1) S(n-1) S: n=2 if n<=0 then S:= 1 else S:= n * S(n-1) S: n=1 if n<=0 then S:= 1 else S:= n * S(n-1) S(n-1) S: n=0 S=1 if n<=0 then S:= 1 else S:= n * S(n-1)
34
J.Nawrocki, Rekursja Definiowanie indukcyjne: 1 zmienna function S(n: integer):integ begin if n<=0 then S:= 1 else S:= n * S(n-1) end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n<=0 then S:= 1 else S:= n * S(n-1) S(n-1) S: n=2 if n<=0 then S:= 1 else S:= n * S(n-1) S: n=1 if n<=0 then S:= 1 else S:= n * S(n-1) S(n-1) 1
35
J.Nawrocki, Rekursja Definiowanie indukcyjne: 1 zmienna function S(n: integer):integ begin if n<=0 then S:= 1 else S:= n * S(n-1) end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n<=0 then S:= 1 else S:= n * S(n-1) S(n-1) S: n=2 if n<=0 then S:= 1 else S:= n * S(n-1) S: n=1 S=1 if n<=0 then S:= 1 else S:= n * S(n-1) S(n-1) 1
36
J.Nawrocki, Rekursja Definiowanie indukcyjne: 1 zmienna function S(n: integer):integ begin if n<=0 then S:= 1 else S:= n * S(n-1) end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n<=0 then S:= 1 else S:= n * S(n-1) S(n-1) S: n=2 if n<=0 then S:= 1 else S:= n * S(n-1) 1
37
J.Nawrocki, Rekursja Definiowanie indukcyjne: 1 zmienna function S(n: integer):integ begin if n<=0 then S:= 1 else S:= n * S(n-1) end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n<=0 then S:= 1 else S:= n * S(n-1) S(n-1) S: n=2 S=2 if n<=0 then S:= 1 else S:= n * S(n-1) 1
38
J.Nawrocki, Rekursja Definiowanie indukcyjne: 1 zmienna function S(n: integer):integ begin if n<=0 then S:= 1 else S:= n * S(n-1) end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n<=0 then S:= 1 else S:= n * S(n-1) 2
39
J.Nawrocki, Rekursja Definiowanie indukcyjne: 1 zmienna function S(n: integer):integ begin if n<=0 then S:= 1 else S:= n * S(n-1) end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 S=6 if n<=0 then S:= 1 else S:= n * S(n-1) 2
40
J.Nawrocki, Rekursja Definiowanie indukcyjne: 1 zmienna Program w Pascalu function S(n: integer): integer; begin if n<=0 then S:= 1 else S:= n * S(n-1) end; var n: integer; begin read(n); writeln( S(n) ) end. n 3 3 We 6 Wy
41
J.Nawrocki, Rekursja Plan wykładu Wprowadzenie Składanie funkcji Definiowanie indukcyjne: 1 zmienna Definiowanie indukcyjne: 2 zmienne Rekursja i zmienne rzeczywiste Usuwanie rekursji Operacja minimum
42
J.Nawrocki, Rekursja Definiowanie indukcyjne: 2 zmienne a b = a*a*a*.. *a P(a,0)= 1 P(a,n)= a * P(a, n-1) f(x, 0)= g(x) f(x, n)= h(x, n-1, f(x, n-1)) Ujęcie matematyczne
43
J.Nawrocki, Rekursja Definiowanie indukcyjne: 2 zmienne a b = a*a*a*.. *a P(a,0)= 1 P(a,n)= a * P(a, n-1) f(x, 0)= g(x) f(x, n)= h(x, n-1, f(x, n-1)) Ujęcie matematyczne f P g(x) = 1 h(x, y, z)= x * z P(a, n)= h(a, n-1, P(a, n-1))= a * P(a, n-1)
44
J.Nawrocki, Rekursja Definiowanie indukcyjne: 2 zmienne P(a,0)= 1 P(a,n)= a * P(a, n-1) Program w Pascalu function P(a,n: integer): integer; begin if n=0 then P:= 1 else P:= a * P(a, n-1) end; var a,n: integer; begin read(a,n); writeln( P(a,n) ) end.
45
J.Nawrocki, Rekursja Plan wykładu Wprowadzenie Składanie funkcji Definiowanie indukcyjne: 1 zmienna Definiowanie indukcyjne: 2 zmienne Rekursja i zmienne rzeczywiste Usuwanie rekursji Operacja minimum
46
J.Nawrocki, Rekursja Rekursja i zmienne rzeczywiste Schemat Hornera p(x) = a n x n + a n-1 x n-1 +.. + a 1 x + a 0 p(x) = a j x j p(x) = (..((a n x + a n-1 )x + a n-2 )x + a n-3..)x + a 0 p(x) = a 0 p(x) = a 1 x + a 0 p(x) = (a 2 x + a 1 )x + a 0 p(x) = ((a 3 x + a 2 )x + a 1 )x + a 0 Tradycyjne ujęcie
47
J.Nawrocki, Rekursja Rekursja i zmienne rzeczywiste Schemat Hornera p(x) = a 0 x n + a 1 x n-1 +.. + a n-1 x + a n p(x) = a j x n-j p(x) = (..((a 0 x + a 1 )x + a 2 )x + a 3..)x + a n p(x) = a 0 p(x) = a 0 x + a 1 p(x) = (a 0 x + a 1 )x + a 2 p(x) = ((a 0 x + a 1 )x + a 2 )x + a 3 Inne ujęcie
48
J.Nawrocki, Rekursja Rekursja i zmienne rzeczywiste (a 0 x + a 1 )x + a 2 a j a[ j ] Schemat Hornera var a: array[0..nMax] of real; function p(x: real; n: integer): real; begin if n=0 then p:= a[0] else p:= p(x, n-1)*x + a[n] end; p(x) = a j x n-j
49
J.Nawrocki, Rekursja Plan wykładu Wprowadzenie Składanie funkcji Definiowanie indukcyjne: 1 zmienna Definiowanie indukcyjne: 2 zmienne Rekursja i zmienne rzeczywiste Usuwanie rekursji Operacja minimum
50
J.Nawrocki, Rekursja Usuwanie rekursji Wady rekursji function f(j: integer): integer; begin if j<=1 then f:= 1 else f:= f(j-1) + f(j-2) end; f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i)
51
J.Nawrocki, Rekursja Usuwanie rekursji Wady rekursji f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) f(5)= f(4) + f(3) f(4)= f(3) + f(2)f(3)= f(2) + f(1) f(2)= f(1) + f(0)
52
J.Nawrocki, Rekursja Usuwanie rekursji f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) 1 0 1 1 f(i) = i =
53
J.Nawrocki, Rekursja Usuwanie rekursji f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) 1 0 1 1 f(i) = i = 2 2 f(2)= f(1) + f(0)
54
J.Nawrocki, Rekursja Usuwanie rekursji f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) 1 0 1 1 f(i) = i = 2 2 3 3 f(3)= f(2) + f(1)
55
J.Nawrocki, Rekursja Usuwanie rekursji f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) 1 0 1 1 f(i) = i = 2 2 3 3 5 4 f(4)= f(3) + f(2)
56
J.Nawrocki, Rekursja Usuwanie rekursji f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) 1 0 1 1 f(i) = i = 2 2 3 3 5 4 8 5 f(5)= f(4) + f(3)
57
J.Nawrocki, Rekursja Usuwanie rekursji f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) 1 0 1 1 f(i) = i = 2 2 3 3 5 4 8 5
58
J.Nawrocki, Rekursja Usuwanie rekursji f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) fib[i]= i = 1 0 1 1 2 2 3 3 5 4 8 5 var fib: [0.. MaxI] of integer;... MaxI
59
J.Nawrocki, Rekursja Usuwanie rekursji f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) fib[i]= i = 1 0 1 1 2 2 3 3 5 4 8 5 fib[0]:= 1; fib[1]:= 1; fib[i]:= fib[i-1] + fib[i-2]; var fib: [0.. MaxI] of integer; function f(n: integer): integer; var i: integer; begin f:= fib[n] end;... MaxI for i:= 2 to n do
60
J.Nawrocki, Rekursja Usuwanie rekursji f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) fib[i]= i = 1 0 1 1 2 2 3 3 5 4 8 5 fib[0]:= 1; fib[1]:= 1; fib[i]:= fib[i-1] + fib[i-2]; var fib: [0.. MaxI] of integer; function f(n: integer): integer; var i: integer; begin f:= fib[n] end;... MaxI for i:= 2 to n do Czy można lepiej?
61
J.Nawrocki, Rekursja Usuwanie rekursji f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) 1 0 1 1 f(i) = i = 2 2 3 3 5 4 8 5 f(5)= f(4) + f(3)
62
J.Nawrocki, Rekursja Usuwanie rekursji f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) 1 0 1 1 f(i) = i = 2 2 3 3 5 4 8 5 f(5)= f(4) + f(3)
63
J.Nawrocki, Rekursja Usuwanie rekursji f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) 1 0 1 1 f(i) = i = 2 2 3 3 5 4 8 5 c = b + a cab
64
J.Nawrocki, Rekursja Usuwanie rekursji f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) 1 0 1 1 f(i) = i = 2 2 3 3 5 4 8 5 cab c:= b + a; c = b + a
65
J.Nawrocki, Rekursja Usuwanie rekursji f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) 1 0 1 1 f(i) = i = 2 2 3 3 5 4 8 5 cab c:= b + a;
66
J.Nawrocki, Rekursja Usuwanie rekursji f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) 1 0 1 1 f(i) = i = 2 2 3 3 5 4 8 5 cab c:= b + a; a:= b; b:= c end; begin 13 6 cab 1 32
67
J.Nawrocki, Rekursja Usuwanie rekursji f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) 1 0 1 1 f(i) = i = 2 2 3 3 5 4 8 5 cab c:= b + a; a:= b; b:= c function f(n: integer): integer; var a, b, c, i: integer; begin f:= a end; for i:= 1 to n do end; begin a:= 1; b:= 1; 13 6
68
J.Nawrocki, Rekursja Plan wykładu Wprowadzenie Składanie funkcji Definiowanie indukcyjne: 1 zmienna Definiowanie indukcyjne: 2 zmienne Rekursja i zmienne rzeczywiste Usuwanie rekursji Operacja minimum
69
J.Nawrocki, Rekursja Operacja minimum Log2(x)= Log 2 x Log2(x)=w 2 w x < 2 w+1 Log2(x)= najmn. w : x < 2 w+1 Log2(x)= ( w) [ x < 2 w+1 ] f(x)= ( y) [ R(x,y) ] Ujęcie matematyczne
70
J.Nawrocki, Rekursja Operacja minimum function f(x: integer): integer; var y: integer; begin y:= 0; while not R(x,y) do y:= y + 1 f:= y end; f(x)= ( y) [ R(x,y) ] Schemat funkcji w Pascalu
71
J.Nawrocki, Rekursja Operacja minimum Log2(x)= ( w) [ x < 2 w+1 ] Funkcja w Pascalu function f(x: integer): integer; var w: integer; begin w:= 0; while not (x < P(2, w+1)) do w:= w + 1; f:= w end;
72
J.Nawrocki, Rekursja Operacja minimum Log2(x)= ( w) [ x < 2 w+1 ] Funkcja w Pascalu function f(x: integer): integer; var p,w: integer; begin w:= 0; p:= 2; (* 2^(0+1) = 2 *) while not (x < p) do begin w:= w + 1; p:= p * 2 end; f:= w end;
73
J.Nawrocki, Rekursja Operacja minimum Minus1(x)= ( y) [ x < y + 2 ] --- efektywne -- f(x)= ( y) [ R(x,y) ] x y R(x,y) Minus1(x)= ( y) [ x = y + 1 ] --- nieefektywne --- Minimum efektywne
74
J.Nawrocki, Rekursja Funkcje rekurencyjne Najmniejsza klasa funkcji zawierająca zero i następnik oraz zamknięta ze względu na operacje: składania funkcji, rekursji prostej, minimum efektywnego. Klasa funkcji obliczalnych
75
J.Nawrocki, Rekursja Zakończenie Jak usuwać rekursję? Programowanie funkcyjne (Lisp, Huskell, Miranda) Zadania: Schemat Hornera dla p(x) = a j x j Problem podziału zbioru * Wreszcie!
76
J.Nawrocki, Rekursja Literatura A. Grzegorczyk, Logika matematyczna, PWN
77
J.Nawrocki, Rekursja Ocena wykładu 1. Wrażenie ogólne? (1 - 6) 2. Zbyt wolno czy zbyt szybko? 3. Czy dowiedziałeś się czegoś ważnego? 4. Co poprawić i jak?
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.