- 2 kwietnia 2026
- Posted by: Damian
- Category: Baza wiedzy

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
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.
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.

1 2 3 4 | funkcja Silnia (n): jeżeli n = 0 lub n = 1 zwróć 1 zwróć n * Silnia(n - 1) |
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):
- Silnia(3) – Warunek nie jest spełniony, bo n = 3, więc przechodzimy do mnożenia: 3 * Silnia (2).
- Silnia(2) – Warunek nie jest spełniony, bo n = 2, więc przechodzimy do mnożenia: 2 * Silnia(1).
- Silnia(1) – Warunek jest spełniony, bo n = 1, więc zwracamy 1.
- Powrót do Silnia(2) (kontynuacja) – Mnożymy wynik z Silnia (1) (czyli 1) przez 2, więc wynikiem jest 2.
- 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
1 2 3 4 5 6 7 | def silnia(n): if n == 0 or n == 1: return 1 return n * silnia(n - 1) wynik = silnia(5) print(wynik) # Oczekiwany wynik: 120 |
Silnia – C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <iostream> using namespace std; int silnia(int n) { if (n == 0 || n == 1) { return 1; } return n * silnia(n - 1); } int main() { int wynik = silnia(5); cout << wynik << endl; // Oczekiwany wynik: 120 return 0; } |
Silnia – Java
1 2 3 4 5 6 7 8 9 10 11 12 | public class Main { public static int silnia(int n) { if (n == 0 || n == 1) { return 1; } return n * silnia(n - 1); } public static void main(String[] args) { int wynik = silnia(5); System.out.println(wynik); // Oczekiwany wynik: 120 } } |
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.

1 2 3 4 5 | funkcja silnia(n): wynik ← 1 dla i = 2, 3 ... n wykonuj wynik ← wynik * i zwróć wynik |
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
1 2 3 4 5 6 7 8 | def silnia(n): wynik = 1 for i in range(2, n + 1): wynik *= i return wynik wynik = silnia(5) print(wynik) # Oczekiwany wynik: 120 |
Silnia – C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include <iostream> using namespace std; int silnia(int n) { long long wynik = 1; for (int i = 2; i <= n; i++) { wynik *= i; } return wynik; } int main() { int wynik = silnia(5); cout << wynik << endl; // Oczekiwany wynik: 120 return 0; } |
Silnia – Java
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class Main { public static int silnia(int n) { int wynik = 1; for (int i = 2; i <= n; i++) { wynik *= i; } return wynik; } public static void main(String[] args) { int wynik = silnia(5); System.out.println(wynik); // Oczekiwany wynik: 120 } } |
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.


