Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałPatrycja Jarzyna Został zmieniony 11 lat temu
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!
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.