Silnia – kalkulator, algorytm i obliczanie silni

Silnia jest pojęciem szczególnie często używanym w ramach matematyki, jednak również informatyka wykorzystuje silnię w różnych przypadkach. Zapoznanie się z algorytmem silni, umożliwi znacznie skuteczniejsze przygotowanie się do rozszerzonej matury z informatyki. W niniejszym artykule przyjrzymy się właściwościom silni, jej zastosowaniom oraz efektywnym metodom jej obliczania. Dowiesz się jak, na różne sposoby, napisać program liczący silnię.

Kalkulator: Silnia – online

Silnia – Kalkulator

Wynik

Wynik:

Co to jest silnia?

Silnia reprezentuje iloczyn wszystkich liczb naturalnych od 1 do n. Oznaczana jest za pomocą symbolu „n!”. To jedno z podstawowych pojęć matematycznych, choć definicja silni jest prosta, jej zastosowania są niezwykle szerokie – od obliczania permutacji i kombinacji po wykorzystywanie w analizie asymptotycznej i rozwinięciach szeregów.

Silnia – wzory

Definicja silni (dla liczb naturalnych):
n!=n×(n−1)×(n−2)×⋯×1
Gdzie n to liczba naturalna, a n! to silnia z liczby n.

Silnia z 0:
0!=1
Zgodnie z definicją matematyczną, silnia z 0 jest równa 1.

Wzór rekurencyjny:
n!=n×(n−1)!
Wzór rekurencyjny, który wyraża silnię z liczby n jako n pomnożoną przez silnię z n−1. Na maturę z informatyki nie jest potrzebne jego zapamiętywanie.

ads banner

Obliczanie silni – Przykłady

Oto kilka przykładów ręcznych obliczeń silni:

0!

0!=1

Zgodnie z definicją matematyczną, silnia z 0 jest równa 1.

1!
1!=1

2!
2!=2×1=2

3!
3!=3×2×1=6

4!
4!=4×3×2×1=24

5!
5!=5×4×3×2×1=120

6!
6!=6×5×4×3×2×1=720

7!
7!=7×6×5×4×3×2×1=5040

Silnia – algorytm i jego implementacja

Algorytm obliczania silni to klasyczny przykład algorytmu wykorzystywanego w matematyce i informatyce.

Rekurencyjna silnia – Schemat blokowy i pseudokod

Poniższy algorytm działa rekurencyjnie, obliczając silnię liczby n przez pomnożenie jej przez silnię liczby n – 1 (i tak dalej), aż do momentu, kiedy natrafi na 0 lub 1.

Silnia - Schemat blokowy - Rekurencja
Rekurencyjna funkcja silni to sposób obliczania silni (oznaczaną jako n!) za pomocą wywołań samej siebie.

Opis Silni – Pseudokod

  • 1 linia – Definiujemy funkcję o nazwie Silnia, która przyjmuje argument n, będący liczbą, dla której chcemy obliczyć silnię.
  • 2 linia – Sprawdzamy warunek: jeśli n jest równe 0 lub 1, przechodzimy do linii 3, w przeciwnym razie przechodzimy do linii 4.
  • 3 linia – Jeśli warunek jest spełniony (czyli n jest równe 0 lub 1), zwracamy wartość 1, ponieważ silnia z 0 lub 1 wynosi zawsze 1.
  • 4 linia – Jeśli n nie jest równe ani 0, ani 1, przechodzimy do linii 4. Zwracamy wynik obliczeń, który polega na pomnożeniu n przez wynik wywołania funkcji Silnia(n – 1), co odpowiada rekurencyjnemu obliczaniu silni z mniejszych liczb, aż do osiągnięcia wartości 1 lub 0.

Przykład działania rekurencyjnego algorytmu silni

Wykonanie powyższego kodu wygląda następująco dla n = 3 (każde wcięcie to kolejny poziom wywołania rekurencyjnego):

  1. Silnia(3) – Warunek nie jest spełniony, bo n = 3, więc przechodzimy do mnożenia: 3 * Silnia (2).
  2.     Silnia(2) – Warunek nie jest spełniony, bo n = 2, więc przechodzimy do mnożenia: 2 * Silnia(1).
  3.         Silnia(1) – Warunek jest spełniony, bo n = 1, więc zwracamy 1.
  4.     Powrót do Silnia(2) (kontynuacja) – Mnożymy wynik z Silnia (1) (czyli 1) przez 2, więc wynikiem jest 2.
  5. Powrót do Silnia(3) (kontynuacja) – Mnożymy wynik z Silnia (2) (czyli 2) przez 3, więc wynikiem jest 6.

Powyższy przykład to zastosowanie rekurencji w ramach obliczania silni, co pozwala znacznie uprościć napisany kod.

Rekurencyjna silnia – Python, C++ i Java

Silnia – Python

Silnia – C++

Silnia – Java

Iteracyjna silnia – Schemat blokowy i pseudokod

Ten rodzaj algorytmu oblicza silnię iteracyjnie, wykorzystując pętlę do przemnożenia kolejnych liczb od 2 do n, zamiast wywołań rekurencyjnych.

Silnia - Schemat blokowy - Iteracja
Zamiast wywoływać funkcję wielokrotnie, jak w przypadku rekurencyjnej wersji, iteracyjna wersja wykorzystuje pętlę do obliczenia wyniku, krok po kroku, mnożąc kolejne liczby od 1 do n.

Opis Silni – Pseudokod

  • Linia 1 – Definiujemy funkcję o nazwie silnia, która przyjmuje argument n, czyli liczbę, dla której chcemy obliczyć silnię.
  • Linia 2 – Tworzymy zmienną wynik i inicjalizujemy ją wartością 1. Zmienna ta będzie przechowywać obliczaną silnię.
  • Linia 3 – Rozpoczynamy pętlę, która będzie wykonywana dla wartości i zaczynających się od 2 i kończących na n (w tym przypadku pętla przebiega przez wszystkie liczby od 2 do n).
  • Linia 4 – W każdej iteracji pętli mnożymy aktualną wartość zmiennej wynik przez i, czyli przez bieżący krok w pętli. Zmienna wynik w ten sposób gromadzi kolejne iloczyny, aż osiągnie końcowy wynik silni.
  • Linia 5 – Po zakończeniu pętli, zwracamy wartość zmiennej wynik, która zawiera obliczoną silnię liczby n.

Iteracyjna silnia – Python, C++ i Java

Silnia – Python

Silnia – C++

Silnia – Java

Silnia – Złożoność algorytmu

Złożoność algorytmów liczących silnie to O(n), czyli złożoność liniowa. Jest to dość logiczne bo mamy jedną pętlę wykonującą się n razy lub n wywołań funkcji. Gdybyśmy narysowali wykres liniowy liczby wykonań pętli w zależności od wielkości n uzyskalibyśmy linię.

QUIZ – Sprawdź swoją wiedzę

Najczęściej zadawane pytania o silnie

4 silnia ile to jest?

4!=4×3×2×1=24

Silnia z liczby 4 to 24.

Czy silnia może być ujemna?

Silnia nie może być ujemna. Silnia jest definiowana tylko dla liczb naturalnych (0, 1, 2, 3, …). Silnia z liczby n (oznaczana jako n!) to iloczyn wszystkich liczb całkowitych od 1 do n, a dla liczb ujemnych nie jest zdefiniowana.

Silnia jak obliczyć?

W ramach ręcznych obliczeń należy obliczyć iloczyn liczb od 1 do n. Wygląda to następująco n!=1×2×3×⋯×n.

Na przykład, jeśli n to 3 oblicza się silnię następująco:

3!=3×2×1=6.

ads banner