Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

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 Jerzy.Nawrocki@put.poznan.pl http://www.cs.put.poznan.pl/jnawrocki/tpi/ Teoretyczne podstawy informatyki Wykład 5

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

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

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

6 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

7 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

8 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

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

10 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

11 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

12 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

13 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

14 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

15 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

16 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

17 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

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

19 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.

20 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)

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

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

23 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-1 +.. + 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

24 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)

25 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)

26 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)

27 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

28 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

29 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

30 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

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

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

33 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

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


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

Podobne prezentacje


Reklamy Google