Silnia - algorytm rekurencyjny

 Zauważmy, że 

n! = 1 * 2 * ... * (n - 1) * n = (n - 1)! * n

 Dla n>1 silnia z n jest równa silni z n-1 pomnożonej przez n. Taki sposób zdefiniowania funkcji poprzez wartość tej samej funkcji liczonej dla zmienionej (najczęściej zmniejszonej) wartości argumentu tej funkcji nazywamy rekurencją. Inaczej mówiąc z rekurencyjną definicją funkcji mamy do czynienia wtedy, gdy w definicji pojawia się ta sama funkcja. Oczywiście obliczając silnię z jakiejś liczby całkowitej nie możemy w nieskończoność wywoływać funkcji silnia dla kolejnych algorytmów. Algorytm musi zostać zrealizowany w skończonej liczbie kroków. Musi istnieć jakaś wartość argumentu, dla której zamiast kolejnego wywołania funkcji otrzymamy jakąś konkretną wartość. W przypadku funkcji silnia tą wartością jest 1, 1!=1.

 Definicję funkcji silnia, którą napisaliśmy na wstępie musimy uzupełnić o warunek przerywający rekurencję, otrzymując ostatecznie:

n! = 1 * 2 * ... * (n - 1) * n = (n - 1)! * n      dla n>1

1! = 1

Schemat blokowy rekurencyjnego algorytmu obliczania silni

 
Realizacja algorytmu w języku:
Pascal, C++, Java, Python, JavaScript