Przeczytaj
Obliczanie wartości potęgi o podstawie i wykładniku naturalnym
Specyfikacja problemu:
Dane:
p
– podstawa potęgi; liczba naturalna,p > 0
w
– wykładnik potęgi; liczba naturalna
Wynik:
wynik
– wynik potęgowania; liczba naturalna
Sposób iteracyjny
Napiszemy funkcję obliczającą wartość potęgi o wykładniku naturalnym. Zaczniemy od nadania jej nazwy. Będziemy również potrzebować dwóch parametrówparametrów – jeden z nich będzie odpowiadać za wartość podstawy, a drugi za wartość wykładnika. Nazwiemy je odpowiednio p
i w
. Obu parametrom nadamy typ int
.
Teraz w ciele funkcji zadeklarujemy zmienną wynik
o typie całkowitym. Przypiszemy jej wartość: 1
. Następnie utworzymy pętlę while
, która będzie wykonywana, dopóki w
jest większe od zera.
W środku pętli będziemy mnożyć zmienną wynik
przez p
, a następnie dekrementowaćdekrementować zmienną w
.
Skoro w zmiennej wynik
mamy już wyliczoną odpowiednią wartość, możemy ją zwrócić.
W ten sposób udało się nam napisać funkcję potęgującą sposobem iteracyjnym.
Gotowa funkcja wygląda następująco:
Sposób rekurencyjny
Napiszmy funkcję obliczającą wartość potęgi metodą rekurencyjną. Funkcja będzie miała dwa parametry typu int
, przechowujące informacje: podstawę i wykładnik potęgi. Nazwiemy je odpowiednio p
i w
.
We wnętrzu funkcji rozważymy dwa przypadki. Pierwszy to warunek przerywania rekurencji (warunek podstawowy), który zwróci wartość i zakończy wykonywanie funkcji. Do jego zdefiniowania użyjemy instrukcji warunkowej if
, gdzie w teście logicznym sprawdzimy, czy zmienna w
jest równa 0. W sytuacji, gdy taka zależność będzie zachodzić, funkcja zwróci 1
. W pozostałych przypadkach funkcja zwróci iloczyn zmiennej p
i siebie samej z argumentami p
i w - 1
.
Tym sposobem napisaliśmy funkcję potęgującą z wykorzystaniem rekurencji.
Jak możemy łatwo zauważyć, wymagała ona napisania znacznie krótszego kodu w porównaniu do wariantu iteracyjnego.
Dla pełnego zrozumienia sposobu działania funkcji rekurencyjnej przeanalizujemy działanie tej funkcji dla podstawy równej 2
i wykładnika o wartości 3
.
Zaczynamy ze zmienną
p = 2
iw = 3
. Ponieważw
nie jest równe0,
wywołujemyp * rekurencja (p, w - 1)
, czyli2 * rekurencja (2, 2).
W wywołaniu funkcji
rekurencja (2, 2)
, w dalszym ciąguw
nie równa się0
, więc ponownie wywołujemy funkcję:2 * rekurencja (2, 1).
W przypadku wywołania funkcji
rekurencja (2, 1)
,w
nadal nie równa się0
, wywołujemy zatem po raz ostatni funkcję – tym razem będzie to2 * rekurencja (2, 0)
.
Funkcja rekurencja (2, 0)
zwróci nam wartość 1
. Teraz, gdy mamy już wartość z warunku podstawowego (początkowego), możemy obliczyć wszystkie użyte wywołania funkcji potęga
. Składają się one razem na odpowiedź na zadane pytanie o wartość liczby 2
podniesionej do potęgi 3
.
rekurencja (2, 1)
to2 * rekurencja (2, 0)
, czyli 2.rekurencja (2, 2)
to2 * rekurencja (2, 1)
, czyli 4.rekurencja (2, 3)
to2 * rekurencja (2, 2)
, czyli 8.
Tym samym udało nam się przeanalizować działanie funkcji rekurencyjnej rekurencja
oraz otrzymać poprawny wynik, czyli 8
.
Obliczanie silni
Specyfikacja problemu:
Dane:
liczba
– liczba naturalna
Wynik:
silnia
– iloczyn liczb od 1 doliczba
; liczba naturalna
Sposób iteracyjny
Sposób rekurencyjny
Słownik
element składni w określonym języku programowania, który w wyniku wywołania podprogramu zostaje utożsamiony (skojarzony) z określonym parametrem podprogramu
zmniejszenie wartości zmiennej o jeden
powtarzanie tej samej operacji określoną liczbę razy lub do momentu, w którym zadany warunek zostanie spełniony
element składni w określonym języku programowania; umożliwia komunikację między podprogramem (funkcją) wywołanym a programem wywołującym; parametry określa się w nagłówku podprogramu (przy jego definicji)
technika programowania polegająca na odwoływaniu się procedur lub funkcji do samych siebie, aż do momentu spełnienia warunku podstawowego
liniowa struktura danych, której dane są pobierane zgodnie z zasadą LIFO (od ang. Last‑In First‑Out - dane dołączone jako ostatnie są pobierane jako pierwsze)
warunek, który spełniony nie spowoduje wywołania funkcji rekurencyjnej, tylko zwróci konkretną wartość