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

Slides:



Advertisements
Podobne prezentacje
Systemy czasu rzeczywistego
Advertisements

STRUKTURY DANYCH.
Sortowanie przez scalanie
Rekurencja 1 Podprogram lub strukturę danych nazywamy rekurencyjną, (recursive subprogram, recursive data structure) jeżeli częściowo składa się z samej.
Informatyka jako dziedzina wiedzy
Programowanie I Rekurencja.
Język asemblera Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do informatyki.
PROGRAMOWANIE STRUKTURALNE
ALGORYTMY I STRUKTURY DANYCH
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.
Systemy czasu rzeczywistego Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do.
Przetwarzanie tekstów i AWK 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
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
Rekursja Copyright, 2004 © Jerzy R. Nawrocki Teoretyczne podstawy 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
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ć
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.
Funkcje w Pascalu Przypomnienie wiadomości o procedurach Prowadzący: Anna Kaleta Piotr Chojnacki.
© A. Jędryczkowski – 2006 r. © A. Jędryczkowski – 2006 r.
Przetwarzanie tekstu i strony WWW Copyright, 1999 © Jerzy R. Nawrocki Wprowadzenie.
Wyrażenia w Turbo Pascalu.
Procedury i funkcje.
Definicja pliku tekstowego Operacje wykonywane na plikach tekstowych
Pliki Pojęcie i rodzaje plików Definicja typu plikowego Operacje wykonywane na plikach elementowych.
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.
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
Języki formalne i gramatyki Copyright, 2005 © Jerzy R. Nawrocki Teoretyczne podstawy.
Podstawowe struktury danych. Typy danych.
Języki formalne Copyright, 2006 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład.
Wprowadzenie do teoretycznych podstaw informatyki Copyright, 2004 © Jerzy R. Nawrocki
Programowanie imperatywne i język C Copyright, 2007 © Jerzy R. Nawrocki Wstęp do.
METODY REPREZENTOWANIA IFORMACJI
Lua - funkcje Możliwość zwracania wielu wartości: function sumdiff(f,s) return f+s,f-s end a=20 b=15 s,d=sumdiff(a,b) print("Suma liczb "..a.."
Zapis prezentacji:

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

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

J.Nawrocki, Rekursja Wprowadzenie Tylko funkcje określone na zbiorze liczb naturalnych i o wartościach naturalnych * 3 5 mod ln 5 5 e Funkcje rekurencyjne

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

J.Nawrocki, Rekursja 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

J.Nawrocki, Rekursja Składanie funkcji var n: integer; begin read(n); writeln(2*n+1) end. Prosty program w Pascalu

J.Nawrocki, Rekursja 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

J.Nawrocki, Rekursja 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

J.Nawrocki, Rekursja 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

J.Nawrocki, Rekursja 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

J.Nawrocki, Rekursja 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

J.Nawrocki, Rekursja 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

J.Nawrocki, Rekursja 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

J.Nawrocki, Rekursja 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

J.Nawrocki, Rekursja 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

J.Nawrocki, Rekursja 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

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

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

J.Nawrocki, Rekursja 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

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

J.Nawrocki, Rekursja 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

J.Nawrocki, Rekursja 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

J.Nawrocki, Rekursja 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 ?

J.Nawrocki, Rekursja 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 ?

J.Nawrocki, Rekursja 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

J.Nawrocki, Rekursja 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

J.Nawrocki, Rekursja 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

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

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

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

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

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

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

J.Nawrocki, Rekursja 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

J.Nawrocki, Rekursja 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

J.Nawrocki, Rekursja 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

J.Nawrocki, Rekursja 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

J.Nawrocki, Rekursja 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

J.Nawrocki, Rekursja 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

J.Nawrocki, Rekursja 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

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

J.Nawrocki, Rekursja 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

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

J.Nawrocki, Rekursja 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.

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

J.Nawrocki, Rekursja Rekursja i zmienne rzeczywiste Schemat Hornera p(x) = a n x n + a n-1 x n 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

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

J.Nawrocki, Rekursja 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

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

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

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

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 =

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)

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)

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)

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

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

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

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

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

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;

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

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 Plan wykładu Wprowadzenie Składanie funkcji Definiowanie indukcyjne: 1 zmienna Definiowanie indukcyjne: 2 zmienne Rekursja i zmienne rzeczywiste Usuwanie rekursji Operacja minimum

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

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

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

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?