Metody rekurencyjne są takimi metodami, które w kodzie programu wywołują same siebie. Powoduje to przejście wykonywania programu do uruchomionego podprogramu i swobodne zagnieżdżanie się tak wywoływanych metod, aż do uzyskania zamierzonego celu (bądź wyczerpania zasobów pamięci maszyny obliczeniowej).
Prostym przykładem metody rekurencyjnej jest poniższy program:
#include <iostream>
#include <ctime>
int dodaj_x_razy_losowa_wartosc(int wartosc, int ile_razy)
{
if (ile_razy>0)
dodaj_x_razy_losowa_wartosc(wartosc+rand(),--ile_razy);
else
return wartosc;
}
int main() {
srand(time(0));
printf("Suma losowa 100x wynosi : %10d",
dodaj_x_razy_losowa_wartosc(rand(),100));
return 0;
}
Jak widać, w powyższym kodzie nie ma w nim ani jednej jawnej pętli, a mimo to program wykonał się dokładnie 100 razy zgodnie z zadanymi parametrami uruchomienia metody rekurencyjnej wywołanej w main. Należy pamiętać, że rekurencyjne wywoływanie metod wykorzystuje dosyć intensywnie pamięć, wobec czego może się zdarzyć, że zabraknie jej dla wykonywanego programu, a program zakończy się błędem. Rekurencja jest jednak bardzo wygodna w niektórych zastosowaniach dzięki czemu nie trzeba pisać rozbudowanych struktur programistycznych. Nie rozumiejąc jednak rekurencji łatwo można doprowadzić do awarii programu – dla przykładu wystarczy zmienić pre-inkrementację zmiennej ile_razy na post-inkrementację, powodując, że program będzie się zagnieżdżał w nieskończoność, aż do wyczerpania dostępnej pamięci.

Comments are closed