Rekurencja
Z Wikipedii
Rekurencja albo rekursja (ang. recursion, z łac. recurrere, przybiec z powrotem) to w logice, programowaniu i w matematyce odwoływanie się np. funkcji lub definicji do samej siebie. Wbrew próbom rozróżnienia terminów[potrzebne źródło] rekursja i rekurencja w rzeczywistości słowa te mają identyczne znaczenie[potrzebne źródło]. Z punktu widzenia języka polskiego preferowane jest określenie rekurencja[1].
W logice wnioskowanie rekurencyjne opiera się na założeniu istnienia pewnego stanu początkowego oraz zdania (lub zdań) stanowiącego podstawę wnioskowania (przy czym aby cały dowód był poprawny zarówno reguła jak i stan początkowy muszą być prawdziwe). Istotą rekurencji jest tożsamość dziedziny i przeciwdziedziny reguły wnioskowania, wskutek czego wynik wnioskowania może podlegać tej samej regule zastosowanej ponownie.
Na prostym przykładzie:
reguła: każdy ojciec jest starszy od swojego syna; każdy ojciec jest czyimś synem
stan początkowy: jestem 22-letnim mężczyzną
teza: ojciec ojca mojego ojca jest starszy ode mnie
dowód:
- mój ojciec jest starszy ode mnie
- mój ojciec jest czyimś synem
- ojciec mojego ojca jest starszy od mojego ojca
- ojciec mojego ojca jest czyimś synem
- itd.
Na przykładzie zastosowań matematycznych poniższa definicja ciągu Fibonacciego jest rekurencyjna:
- fib(0) = 0
- fib(1) = 1
- fib(n) = fib(n − 1) + fib(n − 2), dla

gdyż definiuje funkcję odwołując się w definicji do niej samej.
Każda definicja rekurencyjna potrzebuje przynajmniej jednego przypadku bazowego (nie rekurencyjnego), w tym przypadku są to wartości dla 0 i 1. W przeciwnym wypadku nigdy się nie zakończy.
Dla przykładu, obliczenie fib(4) wygląda następująco:
fib(4) = fib(3) + fib(2) = (fib(2) + fib(1)) + (fib(1) + fib(0)) = ((fib(1) + fib(0)) + fib(1)) + (fib(1) + fib(0)) = ((1 + 0) + 1) + (1 + 0) = 3
Innym przykładem jest wyliczanie największego wspólnego dzielnika za pomocą algorytmu Euklidesa:
- gcd(0,n)=n,
- gcd(k,n)=gcd(n mod k, k) dla k>0 (n mod k oznacza tu resztę z dzielenia n przez k).
lub inaczej:
Rekurencja jest podstawową techniką wykorzystywaną w funkcyjnych językach programowania.
Należy jednak zachować ostrożność przy używaniu rekurencji w rzeczywistych programach. Jeśli program nie jest w rzeczywistości rekurencyjny, to rekurencja może dramatycznie zwiększyć złożoność obliczeniową. Ponadto rekurencja zawsze zwiększa pamięciowe zapotrzebowanie programu (chyba że zostanie użyta możliwa w pewnych przypadkach optymalizacja zwana rekursją ogonową), gdyż wymaga ona zapamiętania m.in. adresów powrotu, pozwalających programowi "zorientować się" do którego miejsca ma wrócić po zakończeniu jednego z wywołań rekurencyjnych. Inną częstą wadą rekurencji jest kompletnie niezależne rozwiązywanie podproblemów, tak, że czasem jeden problem jest rozwiązywany w kilku miejscach rozwinięcia rekurencji, np. w powyższym przykładzie obliczania fib(4) niepotrzebnie jest dwukrotnie obliczana wartość fib(2) (porównaj: programowanie dynamiczne). Takie problemy nie pojawiają się przy drugim z przykładów. Niezaprzeczalną zaletą rekurencji jest przejrzystość programów, które z niej korzystają.
[edytuj] Przykłady
- wielomiany Hermite'a
- wielomiany Legendre'a
- algorytm Euklidesa
- ciąg Fibonacciego
- definicja silni
- symbol Newtona
[edytuj] Zobacz też
- przegląd zagadnień z zakresu matematyki
- rekursja pośrednia
- rekursja ogonowa (tail recursion)
- derekursywacja
- strategia typu dziel i zwyciężaj
- równanie rekurencyjne
- twierdzenie o rekurencji uniwersalnej
- Efekt Droste
| Szykują się zwolnienia w Palmie |
|
Palm Inc, na skutek ciągłego tracenia rynku na rzecz Apple’a i Research in Motion, zostało zmuszone do cięć personalnych.
|
| Apple łamie własne postanowienia licencyjne |
|
Polityka sklepu App Store dla iPhone’a jest jasna: wystawione aplikacje nie mogą w żaden sposób duplikować funkcjonalności palmofonu. Co w takim razie robi tam BdEmailer?
|
| Marketingowa hipokryzja Apple'a |
|
Apple śmiał się w swoich reklamach z astronomicznej kwoty 300 milionów dolarów przeznaczonych na promowanie Visty. Tymczasem firma ta wydała jeszcze większą kwotę na marketing.
|
| DirectX 11 nie tylko dla Windows 7 |
|
Microsoft oficjalnie potwierdził, że nie powtórzy jednego z błędów sprzed lat. Biblioteki DirectX11 będą dostępne nie tylko dla posiadaczy najnowszego systemu Windows 7.
|
| Podkręcony GeForce 9800 GTX+ |
|
Sparkle dodaje do swojej oferty podkręconą kartę graficzną GeForce 9800 GTX+, wyposażoną w procesor graficzny G92b, który pracuje z częstotliwością 761 MHz.
|
