Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podobne dokumenty
Rekurencja (rekursja)

Podstawy programowania. Wykład: 8. Wskaźniki. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 7. Funkcje Przekazywanie argumentów do funkcji. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wykład 9: Polimorfizm i klasy wirtualne

Wykład 9: Metody wirtualne i polimorfizm

Podstawy programowania. Wykład: 11. Trochę różnych przykładów. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wykład 5: Klasy cz. 3

Wykład 1: Wskaźniki i zmienne dynamiczne

Wykład 8: klasy cz. 4

Podstawy programowania. Wykład: 6. Tablice statyczne. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

Podstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno

ALGORYTMY I STRUKTURY DANYCH

Zadanie 1. Test (6 pkt) Zaznacz znakiem X w odpowiedniej kolumnie P lub F, która odpowiedź jest prawdziwa, a która fałszywa.

ALGORYTMY MATEMATYCZNE Ćwiczenie 1 Na podstawie schematu blokowego pewnego algorytmu (rys 1), napisz listę kroków tego algorytmu:

Algorytmy i struktury danych. Wykład 4

EGZAMIN MATURALNY Z INFORMATYKI

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów.

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Informatyka wprowadzenie do algorytmów (II) dr hab. inż. Mikołaj Morzy

Metodyki i techniki programowania

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 5. Karol Tarnowski A-1 p.

5. Rekurencja. Przykłady

1. Liczby wymierne. x dla x 0 (wartością bezwzględną liczby nieujemnej jest ta sama liczba)

FUNKCJA REKURENCYJNA. function s(n:integer):integer; begin if (n>1) then s:=n*s(n-1); else s:=1; end;

Algorytm. a programowanie -

TEORETYCZNE PODSTAWY INFORMATYKI

Algorytmika i pseudoprogramowanie

Wstęp do informatyki- wykład 1 Systemy liczbowe

Rekurencja. Przykład. Rozważmy ciąg

Zadanie 1. Zmiana systemów. Zadanie 2. Szyfr Cezara. Zadanie 3. Czy liczba jest doskonała. Zadanie 4. Rozkład liczby na czynniki pierwsze Zadanie 5.

Informatyka 1. Plan dzisiejszych zajęć. zajęcia nr 1. Elektrotechnika, semestr II rok akademicki 2008/2009

REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał

6. Pętle while. Przykłady

Zadania do samodzielnego rozwiązania

Wstęp do informatyki- wykład 2

Szczegółowy program kursów szkoły programowania Halpress

Algorytm - pojęcie algorytmu, sposób zapisu, poziom szczegółowości, czynności proste i strukturalne. Pojęcie procedury i funkcji.

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

Wstęp do informatyki- wykład 1

Iteracje. Algorytm z iteracją to taki, w którym trzeba wielokrotnie powtarzać instrukcję, aby warunek został spełniony.

Programowanie w Baltie klasa VII

KARTA KURSU. Wstęp do programowania

Wykład 8. Rekurencja. Iterować jest rzeczą ludzką, wykonywać rekursywnie boską. L. Peter Deutsch

Wykład 4. Określimy teraz pewną ważną klasę pierścieni.

Metodyki i techniki programowania

EGZAMIN MATURALNY Z INFORMATYKI. 10 maja 2017 POZIOM ROZSZERZONY. Godzina rozpoczęcia: 14:00 CZĘŚĆ I

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

Wykład VI PASCAL procedury i funkcje przekazywanie parametrów,

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

Programowanie w języku C++ Grażyna Koba

Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle.

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

Wykład 7. Informatyka Stosowana. 21 listopada Informatyka Stosowana Wykład 7 21 listopada / 27

ALGORYTMY Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Wykład 3 Składnia języka C# (cz. 2)

Funkcje i tablice. Elwira Wachowicz. 23 maja 2013

Teoretyczne podstawy informatyki

Zadania język C++ Zad. 1. Napisz program wczytujący z klawiatury wiek dwóch studentów i wypisujący informację o tym, który z nich jest starszy.

Zadanie 1. Potęgi (14 pkt)

Programowanie - wykład 4

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja cz. 1

Sortowanie danych. Jolanta Bachan. Podstawy programowania

1 Wprowadzenie do algorytmiki

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Co to jest algorytm? przepis prowadzący do rozwiązania zadania, problemu,

Wstęp do Informatyki

Poprawność semantyczna

Definicje. Algorytm to:

Funkcje wymierne. Jerzy Rutkowski. Działania dodawania i mnożenia funkcji wymiernych określa się wzorami: g h + k l g h k.

Języki C i C++ Wykład: 1. Wstęp Budowa programu Operacje we/wy Instrukcje wyboru. dr Artur Bartoszewski - Języki C i C++, sem.

Przykładowe zadania z teorii liczb

ZADANIE 1. Ważenie (14 pkt)

Rekurencja. Przygotowała: Agnieszka Reiter

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 1 WSTĘP DO INFORMATYKI

Wykład V PASCAL - operacje na znakach i łańcuchach; - dźwięk,

Technologie informacyjne Wykład VII-IX

Spis treści JĘZYK C - PRZEKAZYWANIE PARAMETRÓW DO FUNKCJI, REKURENCJA. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

Wykład I Cyfrowa reprezentacja informacji Algorytmy metody prezentacji i zapisu

Programowanie strukturalne i obiektowe. Funkcje

dr inż. Jarosław Forenc

Największy wspólny dzielnik Algorytm Euklidesa (także rozszerzony) WZAiP1: Chińskie twierdzenie o resztach

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

Wykład 1. Na początku zajmować się będziemy zbiorem liczb całkowitych

Metody numeryczne w przykładach

Wieczorowe Studia Licencjackie Wrocław, Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa

1. Wykład NWD, NWW i algorytm Euklidesa.

I. Podstawy języka C powtórka

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Zasady arytmetyki stałoprzecinkowej oraz operacji arytmetycznych w formatach Q

Nazwa wariantu modułu (opcjonalnie): Laboratorium programowania w języku C++

składa się z m + 1 uporządkowanych niemalejąco liczb nieujemnych. Pomiędzy p, n i m zachodzi następująca zależność:

Transkrypt:

Podstawy programowania Wykład: 13 Rekurencja 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania Rekurencja - pojęcie 2

Rekurencja - pojęcie Rekurencja (rekursja) wywołanie funkcji przez nią samą wewnątrz ciała funkcji.. Rozróżniamy dwa typy rekurencji: pośrednia funkcja jest wywoływana przez inną funkcję, wywołaną (pośrednio lub bezpośrednio) przez samą funkcję bezpośrednia funkcja wywołuje samą siebie bezpośrednio wewnątrz ciała funkcji (rozwiązanie spotykane częściej). 3

Rekurencja - pojęcie Rekurencja pośrednia 4

Rekurencja - pojęcie Rekurencja bezpośrednia 5

Rekurencja - pojęcie Każda funkcja rekurencyjna musi posiadać warunek zatrzymania (warunek stopu) czyli stan danych, dla którego nie dojdzie do ponownego wywołania funkcji. W przeciwnym razie będzie się wywoływała do momentu przepełnienia stosu (stos jest obszarem pamięci służącym m.in. do przechowywania zmiennych lokalnych funkcji, parametrów wywołania i wartości zwracanej przez funkcję). 6

Rekurencja - pojęcie Zastosowania rekurencji Rekurencję możemy stosować w celu rozwiązania problemów, które wymagają przetworzenia danych, a następnie takiego samego przetworzenia wyników. Zwykle problemy rekurencyjne możemy rozwiązać przy użyciu iteracji (takie rozwiązania są zwykle szybsze od rekurencyjnych odpowiedników). Zaletą rozwiązań rekurencyjnych jest prostota przejrzystość kodu niektóre problemy posiadają proste rozwiązania rekurencyjne i bardzo złożone rozwiązania iteracyjne. 7

Rekurencja - pojęcie Rekurencja przykłady graficznej reprezentacji rekurencji Krzywa Kocha 8

Rekurencja - pojęcie Algorytm rekurencyjny to taki, który rozwiązuje problem, przez rozwiązanie pewnej liczby prostszych przypadków tego samego problemu. Algorytmy rekurencyjne implementujemy w C++ przy użyciu funkcji rekurencyjnych. Funkcje rekurencyjne odpowiadają definicjom rekurencyjnym funkcji matematycznych. 9

Rekurencja - pojęcie Rekurencyjne obliczanie silni 10

Rekurencja - pojęcie Wywołanie: silnia(4) Wywołanie: silnia(3) Wywołanie: silnia(2) Wywołanie: silnia(1) Zwrócenie wartości: silnia(4) Zwrócenie wartości: silnia(3) Zwrócenie wartości: silnia(2) Zwrócenie wartości: silnia(1) Wywołanie -> Zwrócenie wartości: silnia(0) 11

Podstawy programowania Rekurencja - przykłady 12

Rekurencja - przykłady Zadanie: funkcja która oblicza N-tą potęgę liczby X, gdzie N jest nieujemną liczbą całkowitą. X N = X * X N-1 - to definicja rekurencyjna problemu przedstawienie go jako zależności między rozwiązaniem problemu dla danego kroku przetwarzania danych i wynikiem z kroku poprzedniego Aby móc obliczyć X N-1, musimy znaleźć X N-2, X N-3... czyli rozwiązanie problemu mniejszego o jeden krok. W rekurencji problem jest redukowany do prostszej postaci - aż do momentu, gdy możemy znaleźć rozwiązanie bez odwoływania się do postaci rekurencyjnej (w naszym przypadku [X N = X * X N-1 ] ). Taka postać problemu stanowi warunek zatrzymania w naszym przypadku dane, dla których nie jest wymagane odwołanie się do definicji rekurencyjnej problemu to N = 0 13

Rekurencja - przykłady W zapisie matematycznym: Rozwiązując problemy rekurencyjne stosujemy 3 kroki: 1. analiza problemu 2. identyfikacja warunku zatrzymania 3. zapisanie zależności rekurencyjnej 14

Rekurencja - przykłady Funkcja rekurencyjna: Wywołując funkcję potęga powodujemy, że będzie ona wywoływała samą siebie, do momentu, gdy parametr N wywołania nie będzie równy 0. Funkcja nie może zwrócić wartości, do momentu, gdy wszystkie wywołania wewnętrzne nie zwrócą wartości. 15

Rekurencja przykład 2 Napisz funkcję, która wypisze na ekranie n znaków * Rozwiązanie rekurencyjne uzyskujemy w następujący sposób: funkcja nie zwraca wartości, natomiast wypisuje znak * 1. dla n=0 nie wypisuje znaku i kończy działanie 2. dla n>0 wypisuje znak i rozwiązuje problem wypisania n-1 znaków. 16

Rekurencja przykład 3 Napisz funkcję, która wyświetli liczby całkowite od n do 1 funkcja nie zwraca wartości, natomiast wypisuje liczbę całkowitą 1. dla n=1 wypisuje 1 i kończy działanie 2. dla n>1 wypisuje n i rozwiązuje problem wypisania liczb od n-1 do 1 17

Rekurencja przykład 4 Napisz rekurencyjną funkcję, znajdującą największy wspólny dzielnik 2 liczb całkowitych dodatnich. Algorytm Euklidesa opiera się na spostrzeżeniu, że NWD dwóch liczb całkowitych m i n, gdzie m>n, jest równy NWD liczb y i x % y (reszta z dzielenia x przez y). Liczba x dzieli zarówno liczbę m jak i n <=> x dzieli n i resztę z dzielenia m przez n, ponieważ m jest równe sumie m % n i wielokrotności n 18

Rekurencja przykład 5 Napisz funkcję rekurencyjną, która obliczy, wykorzystując algorytm Hornera wartość wielomianu postaci a 0 x n + a 1 x n-1 +... + a n-1 x + a n dla podanej jako argument wartości x i danego wektora współczynników t[i]= a i Ponieważ wielomian stopnia n możemy zapisać w następującej postaci: a 0 x n + a 1 x n-1 +... + a n-1 x + a n = (...((a 0 x+ a 1 )*x+ a 2 )*x+... + a n-1 )x + a n Korzystając ze schematu Hornera, możemy zauważyć, że: 1. funkcja zwraca t[0] gdy i==0 2. funkcja zwraca sumę: t[i]+x*(wynik funkcji dla i-1) gdy i!=0 19

Rekurencja przykład 5 20

Rekurencja przykład 5 21

Podstawy programowania Wady rekurencji 22

Wady rekurencji http://th-www.if.uj.edu.pl/~erichter/dydaktyka/dydaktyka2010/tpi-2010/tpi-wyklad-4-2010.pdf 23

Wady rekurencji http://th-www.if.uj.edu.pl/~erichter/dydaktyka/dydaktyka2010/tpi-2010/tpi-wyklad-4-2010.pdf 24

Wady rekurencji Porównacie złożoności obliczeniowe rekurencji i iteracji http://th-www.if.uj.edu.pl/~erichter/dydaktyka/dydaktyka2010/tpi-2010/tpi-wyklad-4-2010.pdf 25

Literatura: W prezentacji wykorzystano przykłady i fragmenty: Grębosz J. : Symfonia C++, Programowanie w języku C++ orientowane obiektowo, Wydawnictwo Edition 2000. Jakubczyk K.: Turbo Pascal i Borland C++ Przykłady, Helion. Warto zajrzeć także do: Sokół R. : Microsoft Visual Studio 2012 Programowanie w Ci C++, Helion. Kerninghan B. W., Ritchie D. M.: język ANSI C, Wydawnictwo Naukowo Techniczne. Dla bardziej zaawansowanych: Grębosz J. : Pasja C++, Wydawnictwo Edition 2000. Meyers S.: język C++ bardziej efektywnie, Wydawnictwo Naukowo Techniczne 26 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD