Rekurencja

Rekurencja polega na tym, że funkcja wywołuje samą siebie w kodzie. Spójrzmy na przykład:

Kod programu Python

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:

Kod programu Python

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:

Kod programu Python z użyciem rekurencji

def suma_cyfr(n):
  if n<10:
    return n
  else:
    return n % 10 + suma_cyfr(n//10)

Kod programu Python bez użycia rekurencji

def suma_cyfr(n):
  wynik=0
  while(n>0):
    wynik+=n%10
    n//=10
  return wynik

Poprzednia lekcja Następna lekcja