Implementacja rekurencji w języku Haskell

Slides:



Advertisements
Podobne prezentacje
Temat 2: Podstawy programowania Algorytmy – 1 z 2 _________________________________________________________________________________________________________________.
Advertisements

Ekonometria WYKŁAD 10 Piotr Ciżkowicz Katedra Międzynarodowych Studiów Porównawczych.
1 Dr Galina Cariowa. 2 Legenda Iteracyjne układy kombinacyjne Sumatory binarne Sumatory - substraktory binarne Funkcje i układy arytmetyczne Układy mnożące.
Excel 2007 dla średniozaawansowanych zajęcia z dnia
Wyrażenia Algebraiczne Bibliografia Znak 1Znak 2 Znak 3 Znak 4 Znak 5 Znak 6 Znak 7 Znak 8 Znak 9 Znak 10 Znak 11.
NA TROPACH LICZBY П. CZYM JEST LICZBA П? Zacznijmy tak, jak na profesjonalny matematyczny wykład przystało, czyli od definicji. П ≠ 3 П ≠ 3,14 П ≠ 3, …?!
Zmienne losowe Zmienne losowe oznacza się dużymi literami alfabetu łacińskiego, na przykład X, Y, Z. Natomiast wartości jakie one przyjmują odpowiednio.
Karolina Supera Michał Krajewski. Struktura w formie drzewa Funktor jest węzłem Składniki struktur są gałęziami W strukturze możemy zagnieżdżać inne struktury.
Rozwiązywanie równań I-go stopnia z jedną niewiadomą
ULAMKI ZWYKLE KLASA IV. 2 3 kreska ułamkowa licznik ułamka mianownik ułamka ULamek zwykLy.
Dodawania i odejmowanie sum algebraicznych. Mnożenie sumy algebraicznej przez jednomian. Opracowanie Joanna Szymańska Konsultacja Bożena Hołownia.
W KRAINIE TRAPEZÓW. W "Szkole Myślenia" stawiamy na umiejętność rozumowania, zadawania pytań badawczych, rozwiązywania problemów oraz wykorzystania wiedzy.
KOMBINATORYKA.
Menu Jednomiany Wyrażenia algebraiczne -definicja Mnożenie i dzielenie sum algebraicznych przez jednomian Mnożenie sum algebraicznych Wzory skróconego.
Katarzyna Rychlicka Wielomiany. Katarzyna Rychlicka Wielomiany Przykłady Wykresy funkcji wielomianowych Równania wielomianowe Działania na wielomianach.
Sieci przepływowe: algorytmy i ich zastosowania.
Nr36zad3 Klasa IIIa Gimnazjum w Bogdańcu ma zaszczyt zaprezentować rozwiązanie zadania: o trójkątach z monet!
Obliczanie procentu danej wielkości Radosław Hołówko.
 Przedziałem otwartym ( a;b ) nazywamy zbiór liczb rzeczywistych x spełniających układ nierówności x a, co krócej zapisujemy a
Zadanie 4. Treść zadania Oto początkowy fragment pewnego nieskończonego ciągu liczbowego: Jego kolejne wyrazy powstają zgodnie z.
O PARADOKSIE BRAESSA Zbigniew Świtalski Paweł Skałecki Wydział Matematyki, Informatyki i Ekonometrii Uniwersytet Zielonogórski Zakopane 2016.
Konstruowanie robotów z wykorzystaniem Vex IQ
Programowanie Obiektowe – Wykład 1
Rekurencja - Haskell Bartosz Pawlak Sebastian Żółtowski Adam Stegenda Krystian Sobótka Tomasz Gołębiewski.
Rozdział 5 REKURENCJA.
Schematy blokowe.
DEFINICJA I ZASTOSOWANIE W JĘZYKU HASKELL
On-the-Fly Garbage Collection
Zastosowania programu MS Excel 2013 w matematyce
Złota liczba i podział.
Typy i typy klas.
Logarytmy.
JAK OBLICZYĆ DATĘ WIELKANOCY?
Liczby pierwsze.
Rekursje Tak jak w innych językach funkcje mogą odwoływać się same do siebie Możemy regulować głębokość przed stwierdzeniem błędu (MaxRecursion, $RecursionLimit,
ALGORYTMY I STRUKTURY DANYCH
Akademia C# lab. 9 Zdarzenia i delegaty.
Projektowanie wspomagane komputerem
Funkcja – definicja i przykłady
Wstęp do Informatyki - Wykład 3
Wstęp do Informatyki - Wykład 8
Materiały pochodzą z Platformy Edukacyjnej Portalu
Materiały pochodzą z Platformy Edukacyjnej Portalu
Kurs języka C++ – wykład 13 ( )
Dodawanie liczb całkowitych
Języki programowania.
Prezentacja Julia Hamala 3B.
Laboratorium 1 – obsługa wejść i wyjść
Problem Plecakowy (Problem złodzieja okradającego sklep)
Podstawy informatyki Zygfryd Głowacz.
ALGORYTMY I STRUKTURY DANYCH
Pisemne dodawanie i odejmowanie liczb naturalnych
Pisemne dzielenie liczb naturalnych
Proste obliczenia w arkuszu kalkulacyjnym
Rekurencja Ponieważ w Haskellu nie mamy klasycznych pętli for czy while dlatego w wielu algorytmach musimy używać rekurencji.
ETO w Inżynierii Chemicznej
Znajdowanie liczb pierwszych w zbiorze
Doskonalenie rachunku pamięciowego u uczniów
Język C++ Operatory Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła.
Elementy Kombinatoryki
Pomoc przy dzieleniu pisemnym
Programowanie sieciowe Laboratorium 3
Program na dziś Wprowadzenie Logika prezentacji i artykułu
Grazyna Mirkowska Matematyka Dyskretna PJWSTK 2001
Własności asymptotyczne metody najmniejszych kwadratów
dr Robert Kowalczyk, PWSZ Płock
Zapis prezentacji:

Implementacja rekurencji w języku Haskell Autorzy: Olaszewski Michał Witusiński Mateusz Piotrowski Radosław

Rekurencja Nazywana również rekursją, polega na wywołaniu przez funkcje samej siebie. Iteracja jest zastępowana przez algorytmy rekurencyjne. Zadania tak rozwiązywane sa wolniejsze od iteracyjnego odpowiednika, lecz rozwiązanie niektórych problemów jest wygodniejsze. Rekurencja jest często stosowana w matematyce. Implementacja powtarzających się czynności została rozwiązana przez rekurencję, ponieważ w języku Haskell nie istnieją takie instrukcje jak pętle, nie jest możliwa zmiana wartości zmiennej.

Przykład rekurencji – Ciąg Fibonacci’ego Jest to ciąg, gdzie każdy kolejny wyraz ciągu jest sumą dwóch poprzednich wyrazów. Dwa pierwsze elementy ciągu musimy wyznaczyć bez rekurencji. F0=0 F1=1 Fn=Fn-1+Fn-2, dla n≥2 Początkowe wartości to: 0,1,1,2,3,5,8,13,21,34…

Silnia Silnią liczby naturalnej n nazywamy iloczyn wszystkich dodatnich liczb naturalnych nie większych niż n. Oznaczamy za pomocą wykrzyknika (n!) i czytamy n silnia. Na przykład silnia z liczby 6 to 6 * 5 * 4 * 3 * 2 * 1 = 720. Składnia silni w Haskellu: silnia 0 = 1 silnia n = n * silnia (n-1)

W tym przypadku używamy Guards’a W tym przypadku używamy Guards’a. Zapobiega to wyjściu rekurencji dalej niż przewidujemy. Gdybyśmy nie użyli „otherwise=1” funkcja liczyłaby silnie również z liczb ujemnych dążących aż do minus nieskończoności.

Rekurencyjne mnożenie dwóch liczb Mnożenie można zapisać w sposób rekurencyjny Aby pomnożyć liczbę a razy liczbę b, bierzemy liczbę a i dodajemy do siebie b razy np. 2*5=2+2+2+2+2 Przypadkiem bazowym będzie mnożenie przez liczbę 0. Dowolna liczba pomnożona przez 0 daje 0. a * 0 = 0

Potęgowanie rekurencyjne Potęgę o wykładniku naturalnym definiujemy rekurencyjnie: a0 = 1 an = a * an−1 , dla n ≠ 0

Funkcja Maximum Funkcja maximum polega na zwracaniu największego elementu ze zbioru, dlatego musi być zabezpieczona ponieważ zbiór może być pusty, lub zawierać tylko jeden element.

Pierwszy warunek końcowy zwraca błąd jeśli nasza lista jest pusta Pierwszy warunek końcowy zwraca błąd jeśli nasza lista jest pusta. Max’ [] = error „Lista pusta” W wypadku jeśli jest to lista jednoelementowa - wynikiem będzie ten jeden element. Max’ [x] = x

W trzecim warunku końcowym rozłączamy naszą listę na głowę i ogon W trzecim warunku końcowym rozłączamy naszą listę na głowę i ogon. Używamy funkcji where w celu zdefiniowania funkcji maxTail, jako maximum reszty listy, a następnie sprawdzamy warunek (if) czy głowa jest większa od reszty listy. Jeśli tak- zwracamy głowę jako wynik. W innym wypadku zwracamy maximum reszty listy.

Weźmy tablicę liczb całkowitych [1,2,3] Weźmy tablicę liczb całkowitych [1,2,3]. Dzielimy tę tablicę na head(1) i tail(2,3) i wywołujemy funkcję maximum dla tail. Tail jest ponownie dzielony na head(2) i tail(3) w wyniku tego podziału mamy spełniony warunek końca rekurencji. Porównujemy 2 i 3, funkcja zwraca nam 3. Porównujemy wartość zwróconą w kroku 3 czyli 3 z head czyli 3. 3 jest większe od 1 zatem funkcja zwraca 3 jako największą wartość tablicy.

Funkcja duplicate Funkcja pobiera dwa argumenty z czego pierwszy to int, który odpowiada za ilość powtórzeń drugiego argumentu funkcji. Wynikiem działania tej funkcji jest lista powtarzających się elementów.

Przykładowe wywołanie funkcji: replicate 5 S zwraca nam listę [S,S,S,S,S]

Podsumowanie Każda definicja rekurencyjna potrzebuje przynajmniej jednego przypadku bazowego(nie rekurencyjnego). W przeciwnym wypadku nigdy się nie zakończy. W programowaniu rekurencja odgrywa bardzo ważną rolę.

DZIĘKUJEMY ZA UWAGĘ! 