Obliczanie wartości potęgi o podstawie i wykładniku naturalnym

Specyfikacja problemu:

Dane:

  • p – liczba naturalna; podstawa potęgi; p>0

  • w – liczba naturalna; wykładnik potęgi; w>0

Wynik:

  • program zwraca wynik potęgowania pw

Sposób iteracyjny

Linia 1. def potega podkreślnik iter otwórz nawias okrągły p przecinek w zamknij nawias okrągły dwukropek. Linia 2. wynik znak równości 1. Linia 3. while w zamknij nawias ostrokątny 0 dwukropek. Linia 4. wynik znak równości wynik asterysk p. Linia 5. w minus znak równości 1. Linia 7. return wynik.

Sposób rekurencyjny

Linia 1. def potega podkreślnik rekur otwórz nawias okrągły p przecinek w zamknij nawias okrągły dwukropek. Linia 2. if w znak równości znak równości 1 dwukropek. Linia 3. return p. Linia 5. return p asterysk potega podkreślnik rekur otwórz nawias okrągły p przecinek w minus 1 zamknij nawias okrągły.

Obliczanie silni

Specyfikacja problemu:

Dane:

  • liczba – liczba naturalna

Wynik:

  • program zwraca wartość silni podanej liczby naturalnej

Sposób iteracyjny

Linia 1. def silnia otwórz nawias okrągły liczba zamknij nawias okrągły dwukropek. Linia 2. if liczba otwórz nawias ostrokątny 2 dwukropek. Linia 3. return 1. Linia 4. else dwukropek. Linia 5. for i in range otwórz nawias okrągły 2 przecinek liczba zamknij nawias okrągły dwukropek. Linia 6. liczba asterysk znak równości i. Linia 7. return liczba.

Sposób rekurencyjny

Linia 1. def silnia otwórz nawias okrągły liczba zamknij nawias okrągły dwukropek. Linia 2. if liczba otwórz nawias ostrokątny 1 dwukropek. Linia 3. return 1. Linia 4. else dwukropek. Linia 5. return liczba asterysk silnia otwórz nawias okrągły liczba minus 1 zamknij nawias okrągły.

Analiza i porównanie

Możemy zauważyć, że liczba operacji mnożenia, jaką wykonują obie wersje funkcji, jest identyczna. Natomiast różny jest czas niezbędny do ich wykonania. W przypadku funkcji rekurencyjnej obserwujemy znacznie większy czas niezbędny do wykonania obliczenia. Wynika to z faktu, że wykonywanie funkcji rekurencyjnych obarczone jest zawsze narzutem czasowym związanym z obsługą stosustosstosu, a więc dostępem do pamięci, w której zapamiętywane są adresy powrotu z kolejnych wywołań rekurencyjnych. W przypadku wersji iteracyjnej czas niezbędny na wykonywanie mnożeń jest znacznie krótszy. W obu przypadkach obserwujemy liniowy wzrost czasu wraz ze wzrostem liczby mnożeń, co jest normalną sytuacją.

Możemy również zauważyć, że w wersji rekurencyjnej funkcja ma krótszy kod (choć w tym przypadku nie jest on znacznie krótszy).

Już wiesz
  • Czas konieczny na wykonanie funkcji może zależeć od jej rodzaju.

Słownik

iteracja
iteracja

powtarzanie tej samej operacji określoną liczbę razy lub do momentu, w którym zadany warunek zostanie spełniony

matplotlib
matplotlib

biblioteka służąca do przedstawienia obrazów złożonych z punktów o współrzędnych  x oraz y (wykresów, histogramów, rozkładów itp.); moduł matplotlib nie jest dostępny w standardowej instalacji języka Python; należy go zainstalować, korzystając z mechanizmu pip

rekurencja
rekurencja

proces polegający na wywoływaniu funkcji przez siebie samą (zazwyczaj z innymi parametrami) do momentu rozwiązania określonego problemu

stos
stos

liniowa struktura danych, której dane są pobierane zgodnie z zasadą LIFO (dane dołączone jako ostatnie, pobierane są jako pierwsze)