Přednáška 3. Rekurze 1

Podobné dokumenty
Paradigmata programování 1 poznámky k přednášce. 3. Rekurze 1

Paradigmata programování 1

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Paradigmata programování 1

NPRG030 Programování I, 2016/17 1 / :58:13

PARADIGMATA PROGRAMOVÁNÍ 2 PŘÍSLIBY A LÍNÉ VYHODNOCOVÁNÍ

1. Od Scheme k Lispu

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

NPRG030 Programování I, 2010/11

2 Strukturované datové typy Pole Záznam Množina... 4

CZ.1.07/1.5.00/

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

Algoritmizace a programování

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

Paradigmata programování II Korutiny a nedeterminismus

Sada 1 - Základy programování

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Paradigmata programování 2

Paradigmata programování 1

X36UNX 16. Numerické výpočty v sh příkazy expr, bc, dc. Zdeněk Sojka

Implementace LL(1) překladů

Rekurze. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Programování v jazyce JavaScript

Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově orientované programování.

5 Přehled operátorů, příkazy, přetypování

Logické programování I

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Paradigmata programování 1

Úvod do databázových systémů

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů.

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

Paměť počítače. alg2 1

VÝRAZY výrazy = operandy prokládané operátory, vyhodnocované podle priority operátorů

LEKCE 6. Operátory. V této lekci najdete:

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Basic256 - úvod do programování Příklady. ing. petr polách

Hanojská věž. T2: prohledávání stavového prostoru. zadání [1 1 1] řešení [3 3 3] dva možné první tahy: [1 1 2] [1 1 3]

Slepé prohledávání do šířky Algoritmus prohledávání do šířky Při tomto způsobu prohledávání máme jistotu, že vždy nalezneme koncový stav, musíme ale p

Programovací jazyk Pascal

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

MS EXCEL_vybrané matematické funkce

NPRG030 Programování I, 2018/19 1 / :25:37

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

Rekurzivní algoritmy

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

4. Rekurze. BI-EP1 Efektivní programování Martin Kačer

PARADIGMATA PROGRAMOVÁNÍ 2A INTERPRET S VEDLEJŠÍMI EFEKTY A MAKRY

Analýza toku dat. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. 15. listopad, 2012

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 23, 2016

NPRG030 Programování I, 2017/18 1 / :22:16

1. Implementace funkce počet vrcholů. Předmět: Algoritmizace praktické aplikace (3ALGA)

Algoritmizace a programování

IB015 Neimperativní programování. Organizace a motivace kurzu, programovací jazyk Haskell. Jiří Barnat

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_25 09

Logo2 operace, rekurze, větvení výpočtu

Algoritmizace a programování

Větvení programů příkaz IF

V této aplikaci si ukážeme jakým způsobem zobrazovat čas a datum. Pro ovládání zobrazení času a datumu se naučíme využívat nabídku.

Programovani v Maplu Procedura

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

PARADIGMATA PROGRAMOVÁNÍ 2 KORUTINY, NEDETERMINISMUS

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Abstraktní datové typy FRONTA

Operátory. Základy programování 1 Martin Kauer (Tomáš Kühr)

Tematický celek 03 - Cvičné příklady

Programovací jazyk Haskell

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

Evoluční algoritmy. Podmínka zastavení počet iterací kvalita nejlepšího jedince v populaci změna kvality nejlepšího jedince mezi iteracemi

ROZHODOVACÍ PROCEDURY A VERIFIKACE PAVEL SURYNEK, KTIML

Rekurze. IB111 Úvod do programování skrze Python

Informatika 8. třída/6

Programovací í jazyk Haskell

Základy algoritmizace a programování

Programy a algoritmy pracující s čísly. IB111 Úvod do programování skrze Python

Paralelní programování

BI-EP1 Efektivní programování 1

Úvod do databázových systémů

Programovací jazyk Prolog

Operátory pro maticové operace (operace s celými maticemi) * násobení maticové Pro čísla platí: 2*2

WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Programování v jazyce JavaScript

Úvod do programovacích jazyků (Java)

Příklady: (y + (sin(2*x) + 1)*2)/ /2 * 5 = 8.5 (1+3)/2 * 5 = /(2 * 5) = 1.3. Pavel Töpfer, 2017 Programování 1-3 1

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1

Šablonové metaprogramování v C++ Miroslav Virius KSI FJFI ČVUT

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

1. Téma 03 - Rozhodování

Programy a algoritmy pracující s čísly. IB111 Úvod do programování skrze Python

Základy programování Proměnné Procedury, funkce, události Operátory a podmínková logika Objekt Range a Cells, odkazy Vlastnosti, metody a události

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C

ČVUT FEL X36PAA - Problémy a algoritmy. 5. úloha - Seznámení se se zvolenou pokročilou iterativní metodou na problému batohu

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620

Transkript:

Paradigmata programování 1 Přednáška 3. Rekurze 1 Michal Krupka KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO V OLOMOUCI

Obsah 1 Příklady 2 Rekurzivní procedury a rekurzivní výpočetní proces 3 Další příklady M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 1 / 18

Příklad: procentuální podíl M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 2 / 18

Příklad: procentuální podíl (define (percentage-1 part whole) (* (/ part whole) 100)) M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 2 / 18

Příklad: procentuální podíl (define (percentage-1 part whole) (* (/ part whole) 100)) (define the-whole 10625449) M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 2 / 18

Příklad: procentuální podíl (define (percentage-1 part whole) (* (/ part whole) 100)) (define the-whole 10625449) (define (percentage-2 part whole) (let ((whole (if (eq? whole #true) the-whole whole))) (* (/ part whole) 100))) M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 2 / 18

Příklad: procentuální podíl (define (percentage-1 part whole) (* (/ part whole) 100)) (define the-whole 10625449) (define (percentage-2 part whole) (let ((whole (if (eq? whole #true) the-whole whole))) (* (/ part whole) 100))) (define (percentage-3 part whole) (percentage-1 part (if (eq? whole #true) the-whole whole))) M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 2 / 18

Příklad: procentuální podíl (define (percentage-4 part whole) M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 3 / 18

Příklad: procentuální podíl (define (percentage-4 part whole) (if (eq? whole #true) ;je-li whole rovno #true M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 3 / 18

Příklad: procentuální podíl (define (percentage-4 part whole) (if (eq? whole #true) (percentage-4 part the-whole) ;je-li whole rovno #true ;aplikujeme znovu percentage-4 M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 3 / 18

Příklad: procentuální podíl (define (percentage-4 part whole) (if (eq? whole #true) ;je-li whole rovno #true (percentage-4 part the-whole) ;aplikujeme znovu percentage-4 (* (/ part whole) 100))) ;jinak výpočet M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 3 / 18

Příklad: procentuální podíl (define (percentage-4 part whole) (if (eq? whole #true) (percentage-4 part the-whole) (* (/ part whole) 100))) rekurzivní aplikace M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 3 / 18

Bude to fungovat? M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 4 / 18

Bude to fungovat? Prostředí během aplikace (percentage-4 100378 #true): M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 4 / 18

Bude to fungovat? Prostředí během aplikace (percentage-4 100378 #true): Počáteční (globální) prostředí M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 4 / 18

Bude to fungovat? Prostředí během aplikace (percentage-4 100378 #true): Počáteční (globální) prostředí Prostředí procedury percentage-4 (první aplikace) symbol hodnota part 100378 whole #true M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 4 / 18

Bude to fungovat? Prostředí během aplikace (percentage-4 100378 #true): Počáteční (globální) prostředí Prostředí procedury percentage-4 (první aplikace) symbol hodnota part 100378 whole #true Prostředí procedury percentage-4 (druhá aplikace) symbol hodnota part 100378 whole 10625449 M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 4 / 18

Příklad: prohledávání intervalu M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 5 / 18

Příklad: prohledávání intervalu (define (square-1? n) (if (integer? (sqrt n)) #true #false)) M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 5 / 18

Příklad: prohledávání intervalu (define (square-1? n) (if (integer? (sqrt n)) #true #false)) (define (square-2? n) (integer? (sqrt n))) M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 5 / 18

Příklad: prohledávání intervalu (define (square-1? n) (if (integer? (sqrt n)) #true #false)) (define (square-2? n) (integer? (sqrt n))) Přesnost? M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 5 / 18

Příklad: prohledávání intervalu (define (square-1? n) (if (integer? (sqrt n)) #true #false)) (define (square-2? n) (integer? (sqrt n))) Přesnost? (define (square-3? n) (= (sqr (round (sqrt n))) n)) M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 5 / 18

Příklad: prohledávání intervalu M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 6 / 18

Příklad: prohledávání intervalu (define (contains-square-1? a b) M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 6 / 18

Příklad: prohledávání intervalu (define (contains-square-1? a b) (if (> a b) ;když je interval prázdný M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 6 / 18

Příklad: prohledávání intervalu (define (contains-square-1? a b) (if (> a b) #false ;když je interval prázdný ;čtverec neobsahuje M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 6 / 18

Příklad: prohledávání intervalu (define (contains-square-1? a b) (if (> a b) #false (if (square-2? a) ;když je interval prázdný ;čtverec neobsahuje ;je-li dolní konec čtverec M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 6 / 18

Příklad: prohledávání intervalu (define (contains-square-1? a b) (if (> a b) #false (if (square-2? a) #true ;když je interval prázdný ;čtverec neobsahuje ;je-li dolní konec čtverec ;interval čtverec obsahuje M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 6 / 18

Příklad: prohledávání intervalu (define (contains-square-1? a b) (if (> a b) #false (if (square-2? a) #true (contains-square-1? (+ a 1) b)))) ;když je interval prázdný ;čtverec neobsahuje ;je-li dolní konec čtverec ;interval čtverec obsahuje ;jinak zkoumáme ;interval [a + 1, b] M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 6 / 18

Příklad: prohledávání intervalu (define (contains-square-1? a b) (if (> a b) #false (if (square-2? a) #true (contains-square-1? (+ a 1) b)))) ;když je interval prázdný ;čtverec neobsahuje ;je-li dolní konec čtverec ;interval čtverec obsahuje ;jinak zkoumáme ;interval [a + 1, b] rekurzivní aplikace M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 6 / 18

Příklad: prohledávání intervalu M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 7 / 18

Příklad: prohledávání intervalu (define (contains-square-2? a b) (cond ((> a b) #false) ((square? a) #true) (#true (contains-square-2? (+ a 1) b)))) M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 7 / 18

Odbočka: speciální operátor cond větev (cond { ( (> a b) }}{}{{} #false }{{} ) podmínka větve tělo větve ((square? a) #true) (#true (contains-square-2? (+ a 1) b))) } další větve M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 8 / 18

Odbočka: speciální operátor cond větev (cond { ( (> a b) }}{}{{} #false }{{} ) podmínka větve tělo větve ((square? a) #true) (#true (contains-square-2? (+ a 1) b))) } další větve 1 Postupně se vyhodnocují podmínky větví. 2 Jakmile je nějaká splněna, vyhodnotí se tělo příslušné větve. 3 Další podmínky se nevyhodnocují. 4 Vrátí se výsledek vyhodnoceného těla, pokud žádná podmínka nebyla splněna, dojde k chybě. M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 8 / 18

Prohledávání intervalu (define (contains-square-3? a b) (and (<= a b) (or (square? a) (contains-square-3? (+ a 1) b)))) M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 9 / 18

Odbočka: speciální operátory and a or, procedura not Operátor and (and e1 e2... en) Vrací #true, pokud se všechny ei vyhodnotí na #true, jinak vrací #false. Používá zkrácené vyhodnocování. Operátor or (or e1 e2... en) Vrací #true, pokud se některé ei vyhodnotí na #true, jinak #false. Používá zkrácené vyhodnocování. Procedura not Procedura not počítá logickou negaci. M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 10 / 18

Pevný bod funkce cos M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 11 / 18

Pevný bod funkce cos Hledáme přibližnou hodnotu čísla x takového, že cos x = x. M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 11 / 18

Pevný bod funkce cos Hledáme přibližnou hodnotu čísla x takového, že cos x = x. (define (approx-= a b prec) (<= (abs (- a b)) prec)) M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 11 / 18

Pevný bod funkce cos Hledáme přibližnou hodnotu čísla x takového, že cos x = x. (define (approx-= a b prec) (<= (abs (- a b)) prec)) (define (cos-fixpoint-iter x prec) (let ((y (cos x))) (if (approx-= x y prec) y (cos-fixpoint-iter y prec)))) M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 11 / 18

Pevný bod funkce cos Hledáme přibližnou hodnotu čísla x takového, že cos x = x. (define (approx-= a b prec) (<= (abs (- a b)) prec)) (define (cos-fixpoint-iter x prec) (let ((y (cos x))) (if (approx-= x y prec) y (cos-fixpoint-iter y prec)))) (define (cos-fixpoint prec) (cos-fixpoint-iter 0 prec)) M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 11 / 18

Obsah 1 Příklady 2 Rekurzivní procedury a rekurzivní výpočetní proces 3 Další příklady M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 12 / 18

Rekurzivní procedury Definition (rekurzivní procedura) Procedura je rekurzivní, když ve svém těle obsahuje aplikaci sebe sama. je poznat ze zdrojového kódu procedury procedury percentage-4, contains-square-1?, contains-square-2?, contains-square-3?, cos-fixpoint-iter jsou rekurzivní M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 13 / 18

Rekurzivní výpočetní proces Definition (rekurzivní výpočetní proces) Výpočetní proces je rekurzivní, když během aplikace procedury dojde znovu k aplikaci téže procedury. M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 14 / 18

Rekurzivní výpočetní proces Definition (rekurzivní výpočetní proces) Výpočetní proces je rekurzivní, když během aplikace procedury dojde znovu k aplikaci téže procedury. je poznat, když program běží M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 14 / 18

Rekurzivní výpočetní proces Definition (rekurzivní výpočetní proces) Výpočetní proces je rekurzivní, když během aplikace procedury dojde znovu k aplikaci téže procedury. je poznat, když program běží některá aplikace procedury by k aplikaci téže procedury vést neměla (ukončovací podmínka) M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 14 / 18

Rekurzivní výpočetní proces Definition (rekurzivní výpočetní proces) Výpočetní proces je rekurzivní, když během aplikace procedury dojde znovu k aplikaci téže procedury. je poznat, když program běží některá aplikace procedury by k aplikaci téže procedury vést neměla (ukončovací podmínka) Speciální případ: Definition (iterativní výpočetní proces) Výpočetní proces je iterativní, když na konci aplikace procedury dojde opět k aplikaci téže procedury. M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 14 / 18

Rekurzivní výpočetní proces Definition (rekurzivní výpočetní proces) Výpočetní proces je rekurzivní, když během aplikace procedury dojde znovu k aplikaci téže procedury. je poznat, když program běží některá aplikace procedury by k aplikaci téže procedury vést neměla (ukončovací podmínka) Speciální případ: Definition (iterativní výpočetní proces) Výpočetní proces je iterativní, když na konci aplikace procedury dojde opět k aplikaci téže procedury. uvedené procedury generují iterativní výpočetní proces M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 14 / 18

Obsah 1 Příklady 2 Rekurzivní procedury a rekurzivní výpočetní proces 3 Další příklady M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 15 / 18

Obecná mocnina M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 16 / 18

Obecná mocnina (define (power2 a) (* a a)) M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 16 / 18

Obecná mocnina (define (power2 a) (* a a)) (define (power3 a) (* a (power2 a))) M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 16 / 18

Obecná mocnina (define (power2 a) (* a a)) (define (power3 a) (* a (power2 a))) (define (power4 a) (* a (power3 a))) M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 16 / 18

Obecná mocnina (define (power2 a) (* a a)) (define (power3 a) (* a (power2 a))) (define (power4 a) (* a (power3 a))) (define (power5 a) (* a (power4 a))) M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 16 / 18

Obecná mocnina (define (power2 a) (* a a)) (define (power3 a) (* a (power2 a))) (define (power4 a) (* a (power3 a))) (define (power5 a) (* a (power4 a))) (define (power a n) (if (= n 0) 1 (* a (power a (- n 1))))) M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 16 / 18

Faktoriál n! = { 1 když n = 0 n (n 1)! když n > 0 M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 17 / 18

Faktoriál n! = { 1 když n = 0 n (n 1)! když n > 0 Napsáno do procedury: (define (fact-1 n) (if (= n 0) 1 (* n (fact-1 (- n 1))))) M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 17 / 18

Faktoriál iterativní verze M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 18 / 18

Faktoriál iterativní verze (define (fact-2-iter n ir) (if (= n 0) ir (fact-2-iter (- n 1) (* ir n)))) M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 18 / 18

Faktoriál iterativní verze (define (fact-2-iter n ir) (if (= n 0) ir (fact-2-iter (- n 1) (* ir n)))) (define (fact-2 n) (fact-2-iter n 1)) M. Krupka (Univerzita Palackého v Olomouci) PAPR1: 3. Rekurze 1 Olomouc, 2. října 2018 18 / 18