Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Rekurencja. Definicja rekurencji: 1. Zakończenie algorytmu jest jasno określone; 2. „Duży” problem = problem elementarny + problem o mniejszym stopniu.

Podobne prezentacje


Prezentacja na temat: "Rekurencja. Definicja rekurencji: 1. Zakończenie algorytmu jest jasno określone; 2. „Duży” problem = problem elementarny + problem o mniejszym stopniu."— Zapis prezentacji:

1 Rekurencja

2 Definicja rekurencji: 1. Zakończenie algorytmu jest jasno określone; 2. „Duży” problem = problem elementarny + problem o mniejszym stopniu skomplikowania niż problem początkowy.

3 Zadanie Zadanie :  dysponujesz tablicą n liczb całkowitych;  należy określić, czy w tablicy występuje liczba x podana jako parametr? Algorytm rekurencyjny rozwiązania: 1. pobierz pierwszy niezbadany element tablicy n-elementowej; 2. jeśli ten element jest równy x, to wypisz “element znaleziono” i zakończ zadanie; 3. w przeciwnym przypadku zbadaj pozostałą część tablicy. (prog. SZUKTAB.CPP)

4 Podstawowe błędy w programach rekurencyjnych:  złe określenie warunku zakończenia programu;  niewłaściwa dekompozycja problemu.

5 Jak wykonują się programy rekurencyjne? Przykład: Napisz program rekurencyjny na obliczenie silni z n: 0! = 1; n! = n*(n-1)!, dla n >= 1 (prog. SILNIA1.CPP)

6 x = 0? 3*2! 2*1! 1*0! 1 x=3 x=2 x=1 x=0 nie TAK Ilustracja rekurencyjnego sposobu obliczania 3!

7 Niebezpieczeństwa rekurencji:  nieskończona liczba wywołań rekurencyjnych;  wielokrotne wykonanie identycznych obliczeń;  przepełnienie stosu; (prog. PULAPKA.CPP)

8 Ciąg Fibonacciego: fib(0) = 1, fib(1) = 1, fib(n) = fib(n-1) + fib(n-2), gdzie n  2.

9 fib(4) fib(3) fib(2) fib(1) fib(2) fib(1) fib(0) fib(1) fib(0) Wywołania rekurencyjne funkcji Fibonacciego dla n = 4 fib(0) = 1, fib(1) = 1, fib(n) = fib(n-1) + fib(n-2), gdzie n  2.

10 Stack overflow! Przykład: funkcja Mac Carty’ego:

11 Funkcja Mac Carty’ego:

12 Jeszcze raz o myśleniu rekurencyjnym Narysuj spiralę: delta dl

13 (x, y) (x’, y’) idea rysowania rekurencyjnego: (prog. SPIRALA.CPP)

14 Kwadraty parzyste: (prog. KWADRATY.CPP)

15 Fraktal trókątny - narysuj bok trójkąta o długości L ; - wykonaj obrót w prawo o 60  ; - narysuj fraktal trójkątny stopnia n-1 o boku L/2 ; - wykonaj obrót w prawo o 60 . 1. Jeśli n = 0, to zakończ algorytm; 2. Jeśli n > 0, to powtórz 3 razy: n - stopień fraktala L - długość boku (prog FRAKT_TR.CPP)

16 Fraktal sześciokątny 1. Jeśli n = 0, to zakończ algorytm; 2. Jeśli n > 0, to powtórz 6 razy: - narysuj bok sześciokąta foremnego o długości L ; - narysuj fraktal sześciokątny stopnia n-1 o boku L/2 ; - wykonaj obrót w prawo o 60 . n - stopień fraktala L - długość boku (prog. FRAKTAL6.CPP)

17 Fraktal gwiaździsty Jeśli n = 0, to zakończ algorytm; Przypisz: alfa = 3*360/7; Jeśli n > 0, to powtórz 7 razy: - narysuj bok ramienia gwiazdy o długości L ; - wykonaj obrót w prawo o k*alfa stopni; - narysuj fraktal gwiaździsty stopnia n-1 o boku L/2 ; - wykonaj obrót w prawo o (1-k)*alfa stopni. n - stopień fraktala L - długość boku alfa - kąt obrotu k - współczynnik obrotu (prog. GWIAZDY.CPP)

18 Wieże Hanoi ABC

19 ABC ABC a) ABC b) ABC c) A BC d) A BC e) A BC f) A BC g)

20 Wieże Hanoi jeśli n = 1 to PRZENIEŚ (A, C) w przeciwnym przypadku { PRZENIEŚ ( A,C, B, n-1 ); PRZENIEŚ (A, C); PRZENIEŚ ( B, A, C, n-1 ); } funkcja PRZENIEŚ (A, B, C, n): (prog. HANOI.CPP)

21 Programy demonstracyjne: SZUKTAB.CPP SILNIA1.CPP PULAPKA.CPP FIB.CPP MC.CPP SPIRALA.CPP KWADRATY.CPP FRAKT_TR.CPP FRALTAL6.CPP GWIAZDY.CPP PL_KOCHA.CPP HANOI.CPP


Pobierz ppt "Rekurencja. Definicja rekurencji: 1. Zakończenie algorytmu jest jasno określone; 2. „Duży” problem = problem elementarny + problem o mniejszym stopniu."

Podobne prezentacje


Reklamy Google