PYTHON

PYTHON Rekurencja

Rekurencja jest jednym ze sposobów rozwiązywania problemu. Sposób ten zakłada rozbijanie problemu na coraz to mniejsze i mniejsze części, aż dojdziemy do momentu, że problem będzie tak niewielki, że zostanie łatwo rozwiązany.

W programowaniu rekurencja sprowadza się do funkcji, które same siebie wywołują.

Rekurencja opiera się na 3 prawach:

  • funkcja rekurencyjna musi posiadać bazowy problem
  • funkcja rekurencyjna musi zmierzać do bazowego problemu
  • funkcja rekurencyjna musi sama siebie wywoływać

Standardowym przykładem funkcji rekurencyjnej jest obliczanie silni. Dla przypomnienia 3! = 1*2*3 = 6

def silnia (x) :
    if x < 1 :
        return 1
    else :
        return x * silnia (x - 1)

print(silnia(3))

Efekt: 6

Dla przypadku gdy wartość x = 1 wynikiem jest 1.

Dla pozostałych przypadków, a zakładamy, że funkcja przyjmuje wartości liczb naturalnych, funkcja zwraca aktualną wartość pomnożoną przez wartość wywołanej funkcji z parametrem wejściowym o jeden mniejszym.

W podanym przykładzie kolejne kroki przedstawiają się następująco:

  • wywołanie silnia(3)
  • funkcja zwraca 3 * silnia(2)
  • funkcja silnia (2) zwraca 2 * silnia(1)
  • silnia(1) jest problemem bazowym, zwraca więc 1
  • wyniki kolejnych zwróceń składają się w całość, mamy 3 * 2 * 1, co daje nam wynik 6

Spróbujmy jeszcze obliczyć rekurencyjnie sumę liczb od 1 do n, gdzie n jest dowolną liczbą naturalną. Dla wartości 5 wynik powinien przedstawiać się następująco: 1 + 2 + 3 + 4 + 5 = 15

def suma (n) :
    if n == 1 :
        return 1
    else :
        return n + suma(n-1)

print(suma(5))

Efekt: 15