160 likes | 397 Views
Rekurencja 1. Podprogram lub strukturę danych nazywamy rekurencyjną , ( recursive subprogram , recursive data structure ) jeżeli częściowo składa się z samej siebie lub jej definicja odwołuje się do niej samej. Przykłady definicji rekurencyjnych stosowanych w matematyce
E N D
Rekurencja 1 Podprogram lub strukturę danych nazywamy rekurencyjną, (recursive subprogram, recursive data structure) jeżeli częściowo składa się z samej siebie lub jej definicja odwołuje się do niej samej. Przykłady definicji rekurencyjnych stosowanych w matematyce • Definicja liczb naturalnych • Funkcja silnia • Ciąg liczb Fibonacci • Potęga naturalna liczby rzeczywistej • Wielomiany Legendre’a
Rekurencja 2 Rekurencja jest użyteczna, bo umożliwia definiowanie nieskończonych zbiorów obiektów przy pomocy skończonych wyrażeń. Program rekurencyjnyPmożna zapisać jako złożenieFinstrukcji podstawowychSinie zawierajęcychPi samego programuP. P = F(Si;P) DefinicjaJeżeli podprogramPzawiera bezpośrednio odwołanie do samego siebie, toPnazywamy podprogramem bezpośrednio rekurencyjnym (direct recursive subprogram).
Rekurencja 3 Definicja Jeżeli podprogramPzawiera odwołanie do podprogramuQ, który zawiera bezpośrednie odwołanie doP, toPnazywamy podprogramem pośrednio rekurencyjnym (direct recursive subprogram). Definicja Wywołaniem rekurencyjnym podprogramu (recursive call of the subprogram) nazywamy wywołanie podprogramu, który zawiera wywołanie samego siebie (pośrednie, lub bezpośrednie) Podprogramy rekurencyjne umożliwiają wykonywanie nieskończonego procesu obliczeniowego i dlatego powstaje:
Rekurencja 4 ProblemZakończenie nieskończonego procesu obliczeniowego w skończonym czasie. Rozwiązanie. Wywołanie podprogramuPuzależnione jest od warunkuW, który w pewnym momencie przestaje być prawdziwy, co kończy proces obliczeniowy. Zapisujemy to następująco: P = if W thenF(Si;P), albo równoważnie: P = F(Si; if W then P).
Rekurencja 5 Prostą i skuteczną metodą zatrzymania procesu rekurencyjnego jest zastosowanie w podprogramiePparametru wejściowegoni wywołanie podprogramu z wartością n-1. JeżeliW = n > 1, to następujące schematy gwarantują wykonanie podprogramu w skończonej liczbie kroków: P(n) = if n > 1 thenF(Si;P(n-1)), P(n) = F(Si; if n > 1 then P(n-1)). Algorytmy rekurencyjne, a co za tym idzie podprogramy rekurencyjne stosuje się wtedy, gdy rozwiązywany problem, lub przetwarzane dane definiujemy rekurencyjnie. Nie zawsze algorytm rekurencyjny jest najefektywniejszym rozwiązaniem problemu. Przykład PP_028_Potega
Rekurencja 7 Definicja Wariantem podstawowym, albobazowym (base case) algorytmu nazywamy wariant, którego rozwiązanie może być wyznaczone bez rekurencji. Definicja Wariantem ogólnym (general case) algorytmu nazywamy wariant, którego rozwiązanie jest wyrażone w postaci prostszej wersji tego samego wariantu. Definicja Algorytmem rekurencyjnym (recursive algorithm) nazywamy algorytm wyznaczający rozwiązanie problemu obliczeniowego wg wariantu ogólnego i wariantu podstawowego (bazowego)
Rekurencja 8 Pisanie programów rekurencyjnych wymaga: • Zrozumienia istoty rozwiązywanego problemu • Zdefiniowania wariantów bazowych • Zdefiniowania wariantów ogólnych PrzykładPP_029_Permutacje_Rekurencyjnie
Rekurencja 9 PrzykładPP_030_Wieze_Hanoi
Rekurencja 10 Wyszukiwanie.Wyszukiwanie liniowe. Dane wejściowe: Lista - tablicaA(1..n)elementów i elementv. Dane wyjściowe: Indeksitaki, żev = A(i), lub informacja, żevnie jest elementem listy. Przykład PP_031_Iterative_Version_Of_Sequential_Search Przykład PP_032_Recursive_Version_Of_Sequential_Search
Rekurencja 11 Możliwe jest przypadkowe wprowadzenie rekurencji w sytuacji, gdy nazwa podprogramu jest użyta jako identyfikator zmiennej w podprogramie. Zmienna := Nazwa_Podprogramu; Jeżeli podprogram ma parametry, to kompilator wykryje błąd. Jeżeli podprogram nie ma parametrów, to może powstać nieskończona rekurencja (infinite recursion) odpowiadająca pętli nieskończonej. W takim przypadku wystąpiSTORAGE_ERROR.