Rekurencja polega na tym, że funkcja wywołuje samą siebie w kodzie. Spójrzmy na przykład:
def silnia(n):
if n==0 or n==1:
return 1
else:
return silnia(n-1)*n
Jak widzisz, funkcja zwraca komendę: return silnia_rekurencja(n-1)*n
Jednakże funkcja nie zna wartości silnia_rekurencja(n-1) więc musi wykonać się z argumentem n-1.
Niestety nie zna też silnia_rekurencja(n-2), więc będzie się wykonywać, aż n osiągnie wartość zero lub jeden.
Ten sam program można też zapisać przy użyciu pętli for:
def silnia(n):
wynik=1
for i in range(1,n+1):
wynik*=i
return wynik
Rekurencja zwyczajnie pozwala nam łatwiej napisać jakiś program, ale ma ona też czasami kilka minusów.
Zajmuje ona bardzo wiele pamięci komputera, powodując spowolnienie jego pracy, a także większe zużycie się samego komputera.
Potrzebuje on więcej pamięci na zapamiętanie tego samego programu niż gdyby zapisać go z użyciem pętli.
Czasami jednak programy z użyciem rekurencji są nieco szybsze.
Dla przykładu napiszmy jeszcze jeden program z użyciem rekurencji i bez:
def suma_cyfr(n):
if n<10:
return n
else:
return n % 10 + suma_cyfr(n//10)
def suma_cyfr(n):
wynik=0
while(n>0):
wynik+=n%10
n//=10
return wynik