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.

Kategorie: C++ Addendum