Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Rekursja Copyright, 2004 © Jerzy R. Nawrocki Teoretyczne podstawy informatyki.

Коpie: 1
Rekursja Copyright, 2004 © Jerzy R. Nawrocki Teoretyczne podstawy informatyki.

Podobne prezentacje


Prezentacja na temat: "Rekursja Copyright, 2004 © Jerzy R. Nawrocki Teoretyczne podstawy informatyki."— Zapis prezentacji:

1

2 Rekursja Copyright, 2004 © Jerzy R. Nawrocki Teoretyczne podstawy informatyki Wykład 5

3 J.Nawrocki, Rekursja Ulepszenia Dodać rozwiązanie problemu podziału zbioru (wersja rekurencyjna) Dodać instrukcje asemblera dot. Wywoływania podprogramów i rekursji. Zostało mi ok. minut.

4 J.Nawrocki, Rekursja Plan wykładu Silnia Wielomian Liczby Fibonacciego Operacja minimum

5 J.Nawrocki, Rekursja Definiowanie indukcyjne Definiowanie indukcyjne (rekursja / rekurencja): definiujemy nieznane przez nieznane, które będzie znane Wprowadzenie Masło maślane

6 J.Nawrocki, Rekursja Napisz program obliczania n! 1*2*3*.. * (n-1) * n n! = ! = 1 Silnia 4 1! = 1 2! = 2 3! = 6 4! = 24

7 J.Nawrocki, Rekursja begin end. Napisz program obliczania n! 1*2*3*.. * (n-1) * n n! = Silnia

8 J.Nawrocki, Rekursja begin read(n); end. Napisz program obliczania n! 1*2*3*.. * (n-1) * n n! = Silnia

9 J.Nawrocki, Rekursja var n: integer; begin read(n); end. Napisz program obliczania n! 1*2*3*.. * (n-1) * n n! = Silnia

10 J.Nawrocki, Rekursja var n: integer; begin read(n); writeln(n, ! =, S(n) ) end. Napisz program obliczania n! 1*2*3*.. * (n-1) * n n! = Silnia

11 J.Nawrocki, Rekursja var n: integer; begin read(n); writeln(n, ! =, S(n) ) end. Napisz program obliczania n! 1*2*3*.. * (n-1) * n n! = Silnia

12 J.Nawrocki, Rekursja var n: integer; begin read(n); writeln(n, ! =, S(n) ) end. Napisz program obliczania n! 1*2*3*.. * (n-1) * n n! = Silnia 3

13 J.Nawrocki, Rekursja var n: integer; begin read(n); writeln(n, ! =, S(n) ) end. Napisz program obliczania n! 1*2*3*.. * (n-1) * n n! = Silnia 3

14 J.Nawrocki, Rekursja var n: integer; begin read(n); writeln(n, ! =, S(n) ) end. Napisz program obliczania n! 1*2*3*.. * (n-1) * n n! = Silnia 3 3

15 J.Nawrocki, Rekursja var n: integer; begin read(n); writeln(n, ! =, S(n) ) end. Napisz program obliczania n! 1*2*3*.. * (n-1) * n n! = Silnia 3 3 3! = 6

16 J.Nawrocki, Rekursja var n: integer; begin read(n); writeln(n, ! =, S(n) ) end. Napisz program obliczania n! 1*2*3*.. * (n-1) * n n! = Silnia

17 J.Nawrocki, Rekursja function S(n: integer): integer; var n: integer; begin read(n); writeln(n, ! =, S(n) ) end. Napisz program obliczania n! 1*2*3*.. * (n-1) * n n! = Silnia 0! = 1 n! = (n-1)! * n S(0) = 1 S(n) = S(n-1)*n S(n) = 1 jeśli n=0 S(n) = S(n-1)*n jeśli n>0

18 J.Nawrocki, Rekursja function S(n: integer): integer; begin end; var n: integer; begin read(n); writeln(n, ! =, S(n) ) end. Napisz program obliczania n! 1*2*3*.. * (n-1) * n n! = Silnia S(n) = 1 jeśli n=0 S(n) = S(n-1)*n jeśli n>0

19 J.Nawrocki, Rekursja function S(n: integer): integer; begin end; var n: integer; begin read(n); writeln(n, ! =, S(n) ) end. Napisz program obliczania n! 1*2*3*.. * (n-1) * n n! = Silnia S(n) = 1 jeśli n=0 S(n) = S(n-1)*n jeśli n>0

20 J.Nawrocki, Rekursja function S(n: integer): integer; begin if n = 0 then S:= 1; end; var n: integer; begin read(n); writeln(n, ! =, S(n) ) end. Napisz program obliczania n! 1*2*3*.. * (n-1) * n n! = Silnia S(n) = 1 jeśli n=0 S(n) = S(n-1)*n jeśli n>0

21 J.Nawrocki, Rekursja function S(n: integer): integer; begin if n = 0 then S:= 1; end; var n: integer; begin read(n); writeln(n, ! =, S(n) ) end. Napisz program obliczania n! 1*2*3*.. * (n-1) * n n! = Silnia S(n) = 1 jeśli n=0 S(n) = S(n-1)*n jeśli n>0

22 J.Nawrocki, Rekursja function S(n: integer): integer; begin if n = 0 then S:= 1; if n > 0 then S:= S(n-1) * n; end; var n: integer; begin read(n); writeln(n, ! =, S(n) ) end. Napisz program obliczania n! 1*2*3*.. * (n-1) * n n! = Silnia S(n) = 1 jeśli n=0 S(n) = S(n-1)*n jeśli n>0

23 J.Nawrocki, Rekursja Liczba cyfr LCyfr(0) = 1 LCyfr(1) = 1... LCyfr(9) = 1 LCyfr(n) = 1 + LCyfr(n/10)

24 J.Nawrocki, Rekursja Funkcja potęgowa P(a, b) = a b dla naturalnych a,b P(a, 0) = 1 P(a, b) = P(a, b-1) * a

25 J.Nawrocki, Rekursja Program w Pascalu if n=0 then S:= 1 else S:= S(n-1) * n Silnia function S(n: integer): integer; begin end; var n: integer; begin read(n); writeln( S(n) ) end. n 3 WeWy

26 J.Nawrocki, Rekursja Program w Pascalu if n=0 then S:= 1 else S:= S(n-1) * n Silnia function S(n: integer): integer; begin end; var n: integer; begin read(n); writeln( S(n) ) end. n 3 3 WeWy

27 J.Nawrocki, Rekursja Silnia function S(n: integer):integ begin if n=0 then S:= 1 else S:= S(n-1) * n end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n=0 then S:= 1 else S:= S(n-1) *n Instancja funkcji Parametry + zmienne lokal. Instrukcje

28 J.Nawrocki, Rekursja Silnia function S(n: integer):integ begin if n=0 then S:= 1 else S:= S(n-1) * n end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n=0 then S:= 1 else S:= S(n-1) *n

29 J.Nawrocki, Rekursja Silnia function S(n: integer):integ begin if n=0 then S:= 1 else S:= S(n-1) * n end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n=0 then S:= 1 else S:= S(n-1) *n S(n-1) S: n=2 if n=0 then S:= 1 else S:= S(n-1) * n

30 J.Nawrocki, Rekursja Silnia function S(n: integer):integ begin if n=0 then S:= 1 else S:= S(n-1) * n end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n=0 then S:= 1 else S:= S(n-1) * n S(n-1) S: n=2 if n=0 then S:= 1 else S:= S(n-1) * n S(n-1) S: n=1 if n=0 then S:= 1 else S:= S(n-1) * n

31 J.Nawrocki, Rekursja Silnia function S(n: integer):integ begin if n=0 then S:= 1 else S:= S(n-1) * n end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n=0 then S:= 1 else S:= S(n-1) * n S(n-1) S: n=2 if n=0 then S:= 1 else S:= S(n-1) * n S: n=1 if n=0 then S:= 1 else S:= S(n-1) * n S(n-1) S: n=0 if n=0 then S:= 1 else S:= S(n-1) * n

32 J.Nawrocki, Rekursja Silnia function S(n: integer):integ begin if n=0 then S:= 1 else S:= S(n-1) * n end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n=0 then S:= 1 else S:= S(n-1) * n S(n-1) S: n=2 if n=0 then S:= 1 else S:= S(n-1) * n S: n=1 if n=0 then S:= 1 else S:= S(n-1) * n S(n-1) S: n=0 if n=0 then S:= 1 else S:= S(n-1) * n

33 J.Nawrocki, Rekursja Silnia function S(n: integer):integ begin if n=0 then S:= 1 else S:= S(n-1) * n end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n=0 then S:= 1 else S:= S(n-1) * n S(n-1) S: n=2 if n=0 then S:= 1 else S:= S(n-1) * n S: n=1 if n=0 then S:= 1 else S:= S(n-1) * n S(n-1) S: n=0 S=1 if n=0 then S:= 1 else S:= S(n-1) * n

34 J.Nawrocki, Rekursja Silnia function S(n: integer):integ begin if n=0 then S:= 1 else S:= S(n-1) * n end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n=0 then S:= 1 else S:= S(n-1) * n S(n-1) S: n=2 if n=0 then S:= 1 else S:= S(n-1) * n S: n=1 if n=0 then S:= 1 else S:= S(n-1) * n S(n-1) 1

35 J.Nawrocki, Rekursja Silnia function S(n: integer):integ begin if n=0 then S:= 1 else S:= S(n-1) * n end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n=0 then S:= 1 else S:= S(n-1) * n S(n-1) S: n=2 if n=0 then S:= 1 else S:= S(n-1) * n S: n=1 S=1 if n=0 then S:= 1 else S:= S(n-1) * n S(n-1) 1

36 J.Nawrocki, Rekursja Silnia function S(n: integer):integ begin if n=0 then S:= 1 else S:= S(n-1) * n end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n=0 then S:= 1 else S:= S(n-1) * n S(n-1) S: n=2 if n=0 then S:= 1 else S:= S(n-1) * n 1

37 J.Nawrocki, Rekursja Silnia function S(n: integer):integ begin if n=0 then S:= 1 else S:= S(n-1) * n end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n=0 then S:= 1 else S:= S(n-1) * n S(n-1) S: n=2 S=2 if n=0 then S:= 1 else S:= S(n-1) * n 1

38 J.Nawrocki, Rekursja Silnia function S(n: integer):integ begin if n=0 then S:= 1 else S:= S(n-1) * n end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n=0 then S:= 1 else S:= S(n-1) * n 2

39 J.Nawrocki, Rekursja Silnia function S(n: integer):integ begin if n=0 then S:= 1 else S:= S(n-1) * n end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 S=6 if n=0 then S:= 1 else S:= S(n-1) * n 2

40 J.Nawrocki, Rekursja Program w Pascalu if n=0 then S:= 1 else S:= S(n-1) * n Silnia function S(n: integer): integer; begin end; var n: integer; begin read(n); writeln( S(n) ) end. n 3 3 We 6 Wy

41 J.Nawrocki, Rekursja Silnia function S(n: integer):integ begin if n=0 then S:= 1 else S:= S(n-1) * n end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n=0 then S:= 1 else S:= S(n-1) * n S(n-1) S: n=2 if n=0 then S:= 1 else S:= S(n-1) * n S: n=1 if n=0 then S:= 1 else S:= S(n-1) * n S(n-1) S: n=0 if n=0 then S:= 1 else S:= S(n-1) * n

42 J.Nawrocki, Rekursja Silnia function S(n: integer):integ begin if n=0 then S:= 1 else S:= S(n-1) * n end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n=0 then S:= 1 else S:= S(n-1) * n S(n-1) S: n=2 if n=0 then S:= 1 else S:= S(n-1) * n S: n=1 if n=0 then S:= 1 else S:= S(n-1) * n S(n-1) S: n=0

43 J.Nawrocki, Rekursja Silnia function S(n: integer):integ begin if n=0 then S:= 1 else S:= S(n-1) * n end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n=0 then S:= 1 else S:= S(n-1) * n S(n-1) S: n=2 if n=0 then S:= 1 else S:= S(n-1) * n S: n=1 S(n-1) S: n=0

44 J.Nawrocki, Rekursja Silnia function S(n: integer):integ begin if n=0 then S:= 1 else S:= S(n-1) * n end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 if n=0 then S:= 1 else S:= S(n-1) * n S(n-1) S: n=2 S: n=1 S: n=0

45 J.Nawrocki, Rekursja Silnia function S(n: integer):integ begin if n=0 then S:= 1 else S:= S(n-1) * n end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 S: n=2 S: n=1 S: n=0

46 J.Nawrocki, Rekursja Silnia function S(n: integer):integ begin if n=0 then S:= 1 else S:= S(n-1) * n end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 else S: n=2 S: n=1 S: n=0

47 J.Nawrocki, Rekursja Silnia function S(n: integer):integ begin if n=0 then S:= 1 else S:= S(n-1) * n end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 else S: n=2 else S: n=1 S: n=0

48 J.Nawrocki, Rekursja Silnia function S(n: integer):integ begin if n=0 then S:= 1 else S:= S(n-1) * n end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 else S: n=2 else S: n=1 else S: n=0

49 J.Nawrocki, Rekursja Silnia function S(n: integer):integ begin if n=0 then S:= 1 else S:= S(n-1) * n end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 else S: n=2 else S: n=1 else S: n=0 then

50 J.Nawrocki, Rekursja Silnia function S(n: integer):integ begin if n=0 then S:= 1 else S:= S(n-1) * n end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 else S: n=2 else S: n=1 else S: n=0 then

51 J.Nawrocki, Rekursja Silnia function S(n: integer):integ begin if n=0 then S:= 1 else S:= S(n-1) * n end; var n: integer; begin read(n); writeln( S(n) ) end. S: n=3 else S: n=2 else S: n=1 else S: n=0 then

52 J.Nawrocki, Rekursja Silnia S: n=3 else S: n=2 else S: n=1 else S: n=0 then

53 J.Nawrocki, Rekursja Silnia S: n=3 else S: n=2 else S: n=1 else S: n=0 then

54 J.Nawrocki, Rekursja Silnia S: n=3 else S: n=2 else S: n=1 else S: n=0 then

55 J.Nawrocki, Rekursja Silnia S: n=3 else S: n=2 else S: n=1 else S: n=0 then

56 J.Nawrocki, Rekursja Silnia S: n=3 else S: n=2 else S: n=1 else S: n=0 then

57 J.Nawrocki, Rekursja Silnia S: n=3 else S: n=2 else S: n=1 else S: n=0 then

58 J.Nawrocki, Rekursja Silnia S: n=3 else S: n=2 else S: n=1 else S: n=0 then

59 J.Nawrocki, Rekursja Silnia S: n=3 else S: n=2 else S: n=1 else S: n=0 then function S(n: integer):integ begin if n=0 then S:= 1 else S:= S(n-1) * n end; var n: integer; begin read(n); writeln( S(n) ) end.

60 J.Nawrocki, Rekursja Usuwanie rekursji function S(n: integer): integer; begin if n=0 then S:= 1 else S:= S(n-1) * n end; S(n) res S(i) = S(i-1) * iS(i) = res * i res res:= res * iS(0) = 1 res res:= 1.. S(i) S(i-1).. S(1) S(0)

61 J.Nawrocki, Rekursja Usuwanie rekursji function S(n: integer): integer; begin end; res res:= res * i res res:= 1 S(n).. S(i) S(i-1).. S(1) S(0)

62 J.Nawrocki, Rekursja Usuwanie rekursji function S(n: integer): integer; begin res:= 1; (* res:= S(0) *) S:= res end; res res:= res * i res res:= 1 S(n).. S(i) S(i-1).. S(1) S(0)

63 J.Nawrocki, Rekursja Usuwanie rekursji function S(n: integer): integer; begin res:= 1; (* res:= S(0) *) S:= res end; res res:= res * i res res:= 1 S(n).. S(i) S(i-1).. S(1) S(0) i= 1.. n

64 J.Nawrocki, Rekursja Usuwanie rekursji function S(n: integer): integer; begin res:= 1; (* res:= S(0) *) for i:= 1 to n do res:= res * i; S:= res end; res res:= res * i res res:= 1 S(n).. S(i) S(i-1).. S(1) S(0) i= 1.. n var res,i: integer;

65 J.Nawrocki, Rekursja Plan wykładu Silnia Wielomian Liczby Fibonacciego Operacja minimum

66 J.Nawrocki, Rekursja Wielomian Schemat Hornera p(x,n) = a j x n-j = a 0 x n + a 1 x n a n-1 x 1 + a n p(x, 2) = p(x, 1)*x + a 2 = = (p(x, 0)*x + a 1 )*x + a 2 = = (a 0 *x + a 1 )*x + a 2 = = a 0 *x 2 + a 1 *x + a 2 p(x, 0) = a 0 p(x, n) = p(x, n-1)*x + a n p(x, 1) = p(x, 0)*x + a 1 = a 0 *x + a 1

67 J.Nawrocki, Rekursja Wielomian Schemat Hornera p(x,n) = a j x n-j = a 0 x n + a 1 x n a n-1 x 1 + a n p(x, 0) = a 0 p(x, n) = p(x, n-1)*x + a n

68 J.Nawrocki, Rekursja Wielomian 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,n) = a j x n-j = a 0 x n + a 1 x n a n-1 x 1 + a n p(x, n) = a 0 dla n=0 p(x, n) = p(x, n-1)*x + a n

69 J.Nawrocki, Rekursja Plan wykładu Silnia Wielomian Liczby Fibonacciego Operacja minimum

70 J.Nawrocki, Rekursja Liczby Fibonacciego 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)

71 J.Nawrocki, Rekursja Liczby Fibonacciego 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)

72 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) f(i) = i =

73 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) f(i) = i = 2 2 f(2)= f(1) + f(0)

74 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) f(i) = i = f(3)= f(2) + f(1)

75 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) f(i) = i = f(4)= f(3) + f(2)

76 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) f(i) = i = f(5)= f(4) + f(3)

77 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) f(i) = i =

78 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 = var fib: [0.. MaxI] of integer;... MaxI

79 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 = 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

80 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 = 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?

81 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) f(i) = i = f(5)= f(4) + f(3)

82 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) f(i) = i = f(5)= f(4) + f(3)

83 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) f(i) = i = c = b + a cab

84 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) f(i) = i = cab c:= b + a; c = b + a

85 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) f(i) = i = cab c:= b + a;

86 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) f(i) = i = cab c:= b + a; a:= b; b:= c end; begin 13 6 cab 1 32

87 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) f(i) = i = 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

88 J.Nawrocki, Rekursja Plan wykładu Silnia Wielomian Liczby Fibonacciego Operacja minimum

89 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

90 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

91 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;

92 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;

93 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

94 J.Nawrocki, Rekursja Zakończenie Koncepcja rekursji Instancja funkcji Instancja a rekord aktywacji Stos rekordów aktywacji Usuwanie rekursji Minimum efektywne Wreszcie!

95 J.Nawrocki, Rekursja Literatura A. Grzegorczyk, Logika matematyczna, PWN

96 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?


Pobierz ppt "Rekursja Copyright, 2004 © Jerzy R. Nawrocki Teoretyczne podstawy informatyki."

Podobne prezentacje


Reklamy Google