5. Silnia – przykład mechanizmu rekurencji

Silnia z liczby naturalnej n to iloczyn wszystkich liczb od 1 do n, czyli n!=1*2*3*…*(n-1)*n.

Mając do dyspozycji matematyczny wzór silni napiszemy program w prologu obliczający silnie dla dowolnej liczby.

Z wzoru wiemy, że silnia dla 0 wynosi 1.

silnia(0,1).

Z tego wynika, że silnia z liczby daje nam wynik.

silnia(Liczba,Wynik).

PAMIĘTAJ! Liczba i Wynik są zmiennymi dlatego musimy zapisać je dużą literą!

W tym momencie zaczynamy tworzyć regułę, która będzie nam obliczać silnie dla liczb większych od 0, więc aby być pewnym, że liczba jest większa od zera zapisujemy odpowiednie sprawdzenie.

Liczba > 0

Kolejnym krokiem jest rozpisanie wzoru n*(n-1)!.

Aby znaleźć silnię dla naszej Liczby musimy znać silnię dla wyrazu o jeden mniejszego, dopiero wtedy możemy obliczyć Wynik.

NowejLiczbie przypisujemy wartość o jeden mniejszą od Liczby. Obliczamy silnię dla NowejLiczby, a w ostatnim kroku mnożymy naszą Liczbę przez wynik silni nowej liczby i w ten sposób otrzymujemy Wynik.

Silnia jest przykładem wykorzystania mechanizmu rekurencji, czyli stworzona przez nas reguła silni w procesie wnioskowania wywołuję samą siebie. Jednakże z definicji rekurencji wiadomo, że rekurencja potrzebuje co najmniej jednego bazowego przypadku, gdyż w innym razie obliczenia nigdy by się nie kończyły – w przypadku silni naszą bazą jest silnia(0,1). Poszukiwania NowejLiczby kończą się, gdy NowaLiczba wynosi 0, dla którego program zna wartość silni.

POBIERZ PROGRAM

Dla przykładu rozpiszmy obliczanie silni dla Liczba=3.

3*(3-1)!, czyli 3*2! – w tym momencie 2 jest naszą nową liczbą, dla której program będzie musiał obliczyć silnie

2*(2-1)!, czyli 2*1! – w tym momencie 1 jest naszą nową liczbą, dla której program będzie musiał obliczyć silnie

1*(1-1)!, czyli 1*0!, a 0!=1. – w tym momencie 0 jest naszą nową liczbą, dla której program zna silnie, która wynosi 1. 

Widzimy zatem, że program najpierw musi odnaleźć wszystkie liczby, które będzie można przez siebie pomnożyć – dla 3! pierwszą nową liczbą 3-1 jest 2, zatem musimy dla naszej nowej liczby obliczyć nowy wynik, a żeby obliczyć nowy wynik program znów sprawdza, czy nasza liczba jest większa od zera, liczba jest większa od zera, dlatego znów szuka nowej liczby, gdyż nie zna jej nowego wyniku, wykonuje się po raz kolejny 2-1, co daje nam 1 i znów program nie może obliczyć nowego wyniku, więc przyrównuje liczbę do zera, co po raz kolejny daje nam informacje, że liczba jest większa i znów następuje 1-1, co daje nam 0 i w tym momencie program zna silnie dla 0 – silnia(0,1). W tym momencie następuje wymnożenie 1*1, co daje nam wynik 1, następnie program zdejmuje ze stosu liczbę 2 i mnoży 2*1 – wynikiem tego działania jest 2. Ze stosu zostaje ściągnięta kolejna liczba, którą jest 3 i pomnożenie 3*2, daje nam to ostateczny wynik 6, który jest naszą poszukiwaną silnią.

Komentowanie jest wyłączone.