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

Slides:



Advertisements
Podobne prezentacje
Systemy czasu rzeczywistego
Advertisements

STRUKTURY DANYCH.
Informatyka jako dziedzina wiedzy
Imperatywne modele obliczeń Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do.
Język asemblera Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do informatyki.
PROGRAMOWANIE STRUKTURALNE
Współprogramy III Ten wykład ma na celu pokazanie kolejnej ciekawej możliwości, którą oferują współprogramy. Wspólprogramy reprezentujące wyrażenia regularne.
ZŁOŻONOŚĆ OBLICZENIOWA
Turbo pascal – instrukcje warunkowe, iteracyjne,…
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 2: Wstęp do programowania w Pascalu © Jan Kaczmarek.
Systemy czasu rzeczywistego Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do.
Rekurencja Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład.
Imperatywne modele obliczeń Copyright, 2001 © Jerzy R. Nawrocki Wprowadzenie do.
Rekursja Teoretyczne podstawy informatyki Wykład 5
Procesy współbieżne Copyright, 2004 © Jerzy R. Nawrocki Teoretyczne podstawy informatyki.
Wprowadzenie do informatyki Wykład 5
Testy akceptacyjne Analiza systemów informatycznych Wykład 9
Rekurencja Copyright, 2001 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład.
Imperatywne modele obliczeń Copyright, 2003 © Jerzy R. Nawrocki Teoretyczne podstawy.
Metody numeryczne Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie do informatyki.
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Informatyka jako dziedzina wiedzy Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Programowanie imperatywne i granice obliczalności Copyright, 2004 © Jerzy R. Nawrocki
Wprowadzenie do teoretycznych podstaw informatyki
Język asemblera i koncepcja von Neumanna
Programowanie imperatywne i język C
Języki formalne i gramatyki
Informatyka jako dziedzina wiedzy Copyright, 2005 © Jerzy R. Nawrocki Wstęp.
Modularyzacja i struktury danych w C Copyright, 2005 © Jerzy R. Nawrocki Wprowadzenie.
Modularyzacja i struktury danych w C Copyright, 2005 © Jerzy R. Nawrocki Wprowadzenie.
Programowanie imperatywne i język C Copyright, 2005 © Jerzy R. Nawrocki Wstęp.
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Język C – Część II Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie do informatyki.
Dokumenty i prezentacje Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie do.
Wprowadzenie do informatyki Wykład 5
Kurs Pascala – spis treści
Wykład 2 struktura programu elementy języka typy zmienne
Typy wyrażenia, schematy blokowe, writeln, readln, if, pętle
Podprogramy.
Typy złożone, case, stałe. Typ zbiorowy type typ_zb = set of typ_podstawowy; Typem podstawowym może być tylko typ porządkowy. Typem podstawowym może być
Schemat Hornera Mgr inż. Michał Szucki.
Programowanie imperatywne i język C Copyright, 2006 © Jerzy R. Nawrocki Wstęp do.
Programowanie strukturalne i obiektowe
Pliki tekstowe. Operacje na plikach. mgr inż. Agata Pacek.
Andrzej Jędryczkowski Nie da się napisać większego programu bez podziału go na części zwane podprogramami. Podprogram to wyróżniona część programu.
Funkcje w Pascalu Przypomnienie wiadomości o procedurach Prowadzący: Anna Kaleta Piotr Chojnacki.
© A. Jędryczkowski – 2006 r. © A. Jędryczkowski – 2006 r.
Wyrażenia w Turbo Pascalu.
Procedury i funkcje.
PROSTE RACHUNKI WYKONYWANE ZA POMOCĄ KOMPUTERA WPROWADZENIE DO ALGORYTMIKI
1 Wykład 8 Podprogramy. 2 Pojęcie i istota stosowania dzielenie programu na części (logicznie spójne) - nazwane - niezależne od pozostałych części - z.
Modele obliczeń i granice obliczalności Copyright, 1999 © Jerzy R. Nawrocki Wprowadzenie.
Zbiory i rekordy mgr inż. Agata Pacek. Deklaracja typu zbiorowego (określa ilość elementów w zbiorze) type biegi=set of 0..6; Definiowanie zmiennej typu.
Programowanie strukturalne i obiektowe
Informatyka MPZI Wykład 4 Podprogramy Pliki Typ zbiorowy Rekurencja.
Informatyka jako dziedzina wiedzy
Translatory Copyright, 2006 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład 11.
Gramatyki i translatory
Informatyka MZT1 Wykład 6 Iteracje while i repeat Tablice Rekordy
Wykład 10 typ zbiorowy rekurencja.
Ogólna struktura programu w TP
Zagadnienia AI wykład 6.
Języki formalne i gramatyki Copyright, 2005 © Jerzy R. Nawrocki Teoretyczne podstawy.
Wprowadzenie do teoretycznych podstaw informatyki Copyright, 2004 © Jerzy R. Nawrocki
Programowanie imperatywne i język C Copyright, 2007 © Jerzy R. Nawrocki Wstęp do.
Podsumowanie wiedzy MPDI2 sem.3 INFORMATYKA. tworzenie nowego pliku i katalogu, nawigacja po katalogach, listowanie zawartości katalogu, zmiana nazw,
Wykład 1 Informatyka II MPZI2 sem.letni. Tablice Tablice deklarujemy array [ lista typów indeksów ] of typ bazowy (składowych) np. var t1,t2:array [1..5,
Zapis prezentacji:

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

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

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

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

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

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

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

J.Nawrocki, Rekursja Liczba cyfr LCyfr(0) = 1 LCyfr(1) = 1... LCyfr(9) = 1 LCyfr(n) = 1 + LCyfr(n/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

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

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

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

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

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

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

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

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

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.

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)

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;

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

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

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)

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)

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)

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

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

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

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

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;

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;

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

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