Rekursja Teoretyczne podstawy informatyki Wykład 5

Slides:



Advertisements
Podobne prezentacje
Systemy czasu rzeczywistego
Advertisements

Pomysł Sukces Wstępne rozwiązanie Symulacja Wynik zadowala? Poprawa rozwiązania Nie Tak Podstawowa pętla projektowania.
Język asemblera Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do informatyki.
PROGRAMOWANIE STRUKTURALNE
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ęść 8: Wykorzystanie procedur i funkcji © 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.
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.
Team Building Copyright, 2003 © Jerzy R. Nawrocki Requirements Engineering Lecture.
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
Języki formalne i gramatyki
Informatyka jako dziedzina wiedzy Copyright, 2005 © Jerzy R. Nawrocki Wstęp.
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
Współprogramy Plan: Motywacja Składnia Scenariusz obiektu współprogramu Przykłady Producent – konsument ( instrukcja attach ) Czytelnik -pisarze ( instukcja.
Podprogramy.
Programowanie imperatywne i język C Copyright, 2006 © Jerzy R. Nawrocki Wstęp do.
REKURENCJA.
Porysujmy trochę czyli Łączenie SQLa, AutoCADa i Delphi
Programowanie strukturalne i obiektowe
Pliki tekstowe. Operacje na plikach. mgr inż. Agata Pacek.
Procedury i funkcje.
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 MTDI1 Wykład 11 Delphi Pascal c.d. Pliki Typ zbiorowy
Wskaźniki.
A. Jędryczkowski – 2006 ©. Tablica to struktura danych zawierająca zbiór obiektów tego samego typu i odpowiada matematycznemu pojęciu wektora (tablica.
Turbo Pascal umożliwia wykorzystanie w programach zbiorów teoriomnogościowych, których elementy muszą należeć do pewnego określonego typu. Typ zbiorowy.
Pliki elementowe – A. Jędryczkowski © 2007 Turbo Pascal umożliwia wykorzystanie w programach plików elementowych. Pliki takie zawierają informację zakodowaną
Informatyka jako dziedzina wiedzy
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.
Wprowadzenie do teoretycznych podstaw informatyki Copyright, 2004 © Jerzy R. Nawrocki
Programowanie imperatywne i język C Copyright, 2007 © Jerzy R. Nawrocki Wstęp do.
Machine learning Lecture 3
Program Rozwoju Obszarów Wiejskich
1 czerwca w zerówce.
GOSPODAROWANIE ZASOBAMI W ORGANIZACJI
Sprawozdanie roczne z realizacji Planu działania Krajowej Sieci Obszarów Wiejskich na lata za rok 2016 Warszawa, 26 czerwca 2017 r. Materiał.
Stan Wojenny.
Wojewódzki Inspektorat Ochrony Środowiska w Białymstoku
Realizacja sprzężenia od siły w układzie sterowania robotem do zastosowań neurochirurgicznych Dorota Marszalik Wieliczka,
R- Punkt referencyjny (wyjściowy) obrabiarki
Parki krajobrazowe na Podlasiu
Materiały pochodzą z Platformy Edukacyjnej Portalu
Moje dziecko i jego potrzeby.
GMINA RUDZINIEC.
Wykład 7 Prawo urzędnicze.
MIASTO I GMINA OLESNO WYKONANIE BUDŻETU rok 2012.
Uprawnienia laureatów i finalistów olimpiad przedmiotowych oraz laureatów konkursów przedmiotowych Warszawa, 22 kwietnia 2014 r.
SZKOŁA PROMUJĄCA ZDROWIE GIMNAZJUM PUBLICZNE IM
Oferta dla przedsiębiorców 2017
Współprogramy IV.
Zapis prezentacji:

Rekursja Teoretyczne podstawy informatyki Wykład 5 (c) Jerzy Nawrocki TPI, Wykład 5 Teoretyczne podstawy informatyki Wykład 5 Rekursja Jerzy.Nawrocki@put.poznan.pl http://www.cs.put.poznan.pl/jnawrocki/tpi/ Copyright, 2004 © Jerzy R. Nawrocki Rekursja

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Napisz program obliczania n! Silnia Napisz program obliczania n! n! = 1*2*3* .. * (n-1) * n 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; read(n); writeln(n, ‘! = ’, S(n) ) end. 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

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

Silnia Program w Pascalu We n Wy function S(n: integer): integer; begin 3 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

Silnia Program w Pascalu We n Wy 3 function S(n: integer): integer; begin 3 3 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

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

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

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

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

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

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

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

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

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

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

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

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

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

Silnia Program w Pascalu We n Wy 3 6 function S(n: integer): integer; begin 3 3 6 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

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

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

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

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

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

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

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

Silnia S: n=3 else S: n=2 else S: n=1 else S: n=0 function S(n: integer):integ begin if n=0 then S:= 1 else S:= S(n-1) * n end; var n: integer; read(n); writeln( S(n) ) end. S: n=0 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; read(n); writeln( S(n) ) end. 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; read(n); writeln( S(n) ) end. 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; read(n); writeln( S(n) ) end. 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 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=2 else S: n=1 else S: n=0 then S: n=3 else J.Nawrocki, Rekursja

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

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

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

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

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

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

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

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

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

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

p(x,n) =  ajxn-j = a0xn + a1xn-1 + .. + an-1x1 + an Wielomian Schemat Hornera p(x,n) =  ajxn-j = a0xn + a1xn-1 + .. + an-1x1 + an p(x, 0) = a0 p(x, n) = p(x, n-1)*x + an p(x, 1) = p(x, 0)*x + a1 = a0*x + a1 p(x, 2) = p(x, 1)*x + a2 = = (p(x, 0)*x + a1)*x + a2 = = (a0*x + a1)*x + a2 = = a0*x2 + a1*x + a2 J.Nawrocki, Rekursja

p(x,n) =  ajxn-j = a0xn + a1xn-1 + .. + an-1x1 + an Wielomian Schemat Hornera p(x,n) =  ajxn-j = a0xn + a1xn-1 + .. + an-1x1 + an p(x, 0) = a0 p(x, n) = p(x, n-1)*x + an J.Nawrocki, Rekursja

p(x,n) =  ajxn-j = a0xn + a1xn-1 + .. + an-1x1 + an Wielomian Schemat Hornera p(x,n) =  ajxn-j = a0xn + a1xn-1 + .. + an-1x1 + an 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) = a0 dla n=0 p(x, n) = p(x, n-1)*x + an J.Nawrocki, Rekursja

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

function f(j: integer): integer; begin if j<=1 then f:= 1 Liczby Fibonacciego Wady rekursji f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) function f(j: integer): integer; begin if j<=1 then f:= 1 else f:= f(j-1) + f(j-2) end; J.Nawrocki, Rekursja

Liczby Fibonacciego Wady rekursji f(5)= f(4) + f(3) f(4)= f(3) + f(2) (c) Jerzy Nawrocki Liczby Fibonacciego TPI, Wykład 5 Wady rekursji 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(3)= f(2) + f(1) f(2)= f(1) + f(0) f(2)= f(1) + f(0) f(2)= f(1) + f(0) J.Nawrocki, Rekursja Rekursja

Usuwanie rekursji f(i) = i = 1 1 f(0) = 1, f(1) = 1 (c) Jerzy Nawrocki Usuwanie rekursji TPI, Wykład 5 f(i) = i = 1 1 f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) J.Nawrocki, Rekursja Rekursja

Usuwanie rekursji f(i) = i = 1 1 2 f(2)= f(1) + f(0) (c) Jerzy Nawrocki Usuwanie rekursji TPI, Wykład 5 f(i) = i = 1 1 2 f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) f(2)= f(1) + f(0) J.Nawrocki, Rekursja Rekursja

Usuwanie rekursji f(i) = i = 1 1 2 3 f(3)= f(2) + f(1) (c) Jerzy Nawrocki Usuwanie rekursji TPI, Wykład 5 f(i) = i = 1 1 2 3 f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) f(3)= f(2) + f(1) J.Nawrocki, Rekursja Rekursja

Usuwanie rekursji f(i) = i = 1 1 2 3 5 4 f(4)= f(3) + f(2) (c) Jerzy Nawrocki Usuwanie rekursji TPI, Wykład 5 f(i) = i = 1 1 2 3 5 4 f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) f(4)= f(3) + f(2) J.Nawrocki, Rekursja Rekursja

Usuwanie rekursji f(i) = i = 1 1 2 3 5 4 8 5 f(5)= f(4) + f(3) (c) Jerzy Nawrocki Usuwanie rekursji TPI, Wykład 5 f(i) = i = 1 1 2 3 5 4 8 5 f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) f(5)= f(4) + f(3) J.Nawrocki, Rekursja Rekursja

Usuwanie rekursji f(i) = i = 1 1 2 3 5 4 8 5 f(0) = 1, f(1) = 1 (c) Jerzy Nawrocki Usuwanie rekursji TPI, Wykład 5 f(i) = i = 1 1 2 3 5 4 8 5 f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) J.Nawrocki, Rekursja Rekursja

Usuwanie rekursji 1 1 2 3 5 8 ... i = 1 2 3 4 5 MaxI (c) Jerzy Nawrocki Usuwanie rekursji TPI, Wykład 5 fib[i]= 1 1 2 3 5 8 ... i = 1 2 3 4 5 MaxI f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) var fib: [0 .. MaxI] of integer; J.Nawrocki, Rekursja Rekursja

Usuwanie rekursji 1 1 2 3 5 8 ... i = 1 2 3 4 5 MaxI (c) Jerzy Nawrocki Usuwanie rekursji TPI, Wykład 5 fib[i]= 1 1 2 3 5 8 ... i = 1 2 3 4 5 MaxI f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) var fib: [0 .. MaxI] of integer; function f(n: integer): integer; var i: integer; begin fib[0]:= 1; fib[1]:= 1; for i:= 2 to n do fib[i]:= fib[i-1] + fib[i-2]; f:= fib[n] end; J.Nawrocki, Rekursja Rekursja

Usuwanie rekursji 1 1 2 3 5 8 ... i = 1 2 3 4 5 MaxI Czy można lepiej? (c) Jerzy Nawrocki Usuwanie rekursji TPI, Wykład 5 fib[i]= 1 1 2 3 5 8 ... i = 1 2 3 4 5 MaxI f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) var fib: [0 .. MaxI] of integer; function f(n: integer): integer; var i: integer; begin Czy można lepiej? fib[0]:= 1; fib[1]:= 1; for i:= 2 to n do fib[i]:= fib[i-1] + fib[i-2]; f:= fib[n] end; J.Nawrocki, Rekursja Rekursja

Usuwanie rekursji f(i) = i = 1 1 2 3 5 4 8 5 f(5)= f(4) + f(3) (c) Jerzy Nawrocki Usuwanie rekursji TPI, Wykład 5 f(i) = i = 1 1 2 3 5 4 8 5 f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) f(5)= f(4) + f(3) J.Nawrocki, Rekursja Rekursja

Usuwanie rekursji f(i) = i = 1 1 2 3 5 4 8 5 1 2 f(5)= f(4) + f(3) (c) Jerzy Nawrocki Usuwanie rekursji TPI, Wykład 5 f(i) = i = 1 1 2 3 5 4 8 5 1 2 f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) f(5)= f(4) + f(3) J.Nawrocki, Rekursja Rekursja

Usuwanie rekursji i = 1 1 2 3 5 4 8 5 1 2 a b c (c) Jerzy Nawrocki Usuwanie rekursji TPI, Wykład 5 f(i) = i = 1 1 2 3 5 4 8 5 1 2 a b c f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) c = b + a J.Nawrocki, Rekursja Rekursja

Usuwanie rekursji i = 1 1 2 3 5 4 8 5 1 2 a b c (c) Jerzy Nawrocki Usuwanie rekursji TPI, Wykład 5 f(i) = i = 1 1 2 3 5 4 8 5 1 2 a b c f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) c = b + a c:= b + a; J.Nawrocki, Rekursja Rekursja

Usuwanie rekursji i = 1 1 2 3 5 4 8 5 1 2 a b c (c) Jerzy Nawrocki Usuwanie rekursji TPI, Wykład 5 f(i) = i = 1 1 2 3 5 4 8 5 1 2 a b c f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) c:= b + a; J.Nawrocki, Rekursja Rekursja

Usuwanie rekursji i = 1 1 2 3 5 4 8 5 13 6 1 2 a b c a b c (c) Jerzy Nawrocki Usuwanie rekursji TPI, Wykład 5 f(i) = i = 1 1 2 3 5 4 8 5 13 6 1 2 a b c 1 f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) a b c 2 3 begin c:= b + a; a:= b; b:= c end; J.Nawrocki, Rekursja Rekursja

Usuwanie rekursji i = 1 1 2 3 5 4 8 5 13 1 2 6 a b c (c) Jerzy Nawrocki Usuwanie rekursji TPI, Wykład 5 f(i) = i = 1 1 2 3 5 4 8 5 13 1 2 6 a b c f(0) = 1, f(1) = 1 f(i+2) = f(i+1) + f(i) function f(n: integer): integer; var a, b, c, i: integer; begin a:= 1; b:= 1; for i:= 1 to n do begin c:= b + a; a:= b; b:= c end; f:= a end; J.Nawrocki, Rekursja Rekursja

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

Operacja minimum Ujęcie matematyczne f(x)= ( y) [ R(x,y) ] Log2(x)= Log2 x Log2(x)=w  2w  x < 2w+1 Log2(x)= najmn. w : x < 2w+1 Log2(x)= ( w) [ x < 2w+1 ] J.Nawrocki, Rekursja

Schemat funkcji w Pascalu Operacja minimum Schemat funkcji w Pascalu 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) ] J.Nawrocki, Rekursja

Operacja minimum Funkcja w Pascalu Log2(x)= ( w) [ x < 2w+1 ] 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 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 w:= w + 1; p:= p * 2 end; f:= w Log2(x)= ( w) [ x < 2w+1 ] J.Nawrocki, Rekursja

Operacja minimum Minimum efektywne --- nieefektywne --- f(x)= ( y) [ R(x,y) ] x y R(x,y) Minus1(x)= ( y) [ x < y + 2 ] --- efektywne -- Minus1(x)= ( y) [ x = y + 1 ] --- nieefektywne --- J.Nawrocki, Rekursja

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

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

2. Zbyt wolno czy zbyt szybko? 3. Czy dowiedziałeś się czegoś ważnego? 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? J.Nawrocki, Rekursja