Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Rekurencja Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład.

Podobne prezentacje


Prezentacja na temat: "Rekurencja Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład."— Zapis prezentacji:

1 Rekurencja Copyright, 2000 © Jerzy R. Nawrocki Jerzy.Nawrocki@put.poznan.pl http://www.cs.put.poznan.pl/~nawrocki/ics/ Wprowadzenie do informatyki Wykład 4

2 J.Nawrocki, Wprowadzenie.., Wykład 4 Plan wykładu Wprowadzenie Składanie funkcji Definiowanie indukcyjne: 1 zmienna Definiowanie indukcyjne: 2 zmienne Rekursja i zmienne rzeczywiste Operacja minimum

3 J.Nawrocki, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 Plan wykładu Wprowadzenie Składanie funkcji Definiowanie indukcyjne: 1 zmienna Definiowanie indukcyjne: 2 zmienne Rekursja i zmienne rzeczywiste Operacja minimum

5 J.Nawrocki, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 Składanie funkcji var n: integer; begin read(n); writeln(2*n+1) end. Prosty program w Pascalu

7 J.Nawrocki, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 Plan wykładu Wprowadzenie Składanie funkcji Definiowanie indukcyjne: 1 zmienna Definiowanie indukcyjne: 2 zmienne Rekursja i zmienne rzeczywiste Operacja minimum

18 J.Nawrocki, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 Plan wykładu Wprowadzenie Składanie funkcji Definiowanie indukcyjne: 1 zmienna Definiowanie indukcyjne: 2 zmienne Rekursja i zmienne rzeczywiste Operacja minimum

42 J.Nawrocki, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 Plan wykładu Wprowadzenie Składanie funkcji Definiowanie indukcyjne: 1 zmienna Definiowanie indukcyjne: 2 zmienne Rekursja i zmienne rzeczywiste Operacja minimum

46 J.Nawrocki, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 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, Wprowadzenie.., Wykład 4 Plan wykładu Wprowadzenie Składanie funkcji Definiowanie indukcyjne: 1 zmienna Definiowanie indukcyjne: 2 zmienne Rekursja i zmienne rzeczywiste Usuwanie rekursji Operacja minimum

53 J.Nawrocki, Wprowadzenie.., Wykład 4 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

54 J.Nawrocki, Wprowadzenie.., Wykład 4 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

55 J.Nawrocki, Wprowadzenie.., Wykład 4 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;

56 J.Nawrocki, Wprowadzenie.., Wykład 4 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;

57 J.Nawrocki, Wprowadzenie.., Wykład 4 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

58 J.Nawrocki, Wprowadzenie.., Wykład 4 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

59 J.Nawrocki, Wprowadzenie.., Wykład 4 Zakończenie Jak usuwać rekursję? Programowanie funkcyjne (Lisp, Huskell, Miranda) Zadania: Schemat Hornera dla p(x) = a j x j Liczba automorficzna Problem podziału zbioru * Wreszcie!

60 J.Nawrocki, Wprowadzenie.., Wykład 4 Literatura A. Grzegorczyk, Logika matematyczna, PWN

61 J.Nawrocki, Wprowadzenie.., Wykład 4 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?


Pobierz ppt "Rekurencja Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład."

Podobne prezentacje


Reklamy Google