Les nombres sous - factoriels ou rencontres ( A000166 ) sont une séquence de nombres similaires aux nombres factoriels qui apparaissent dans la combinatoire des permutations. En particulier, le n ième sous-factoriel ! N donne le nombre de dérangements d'un ensemble de n éléments. Un dérangement est une permutation dans laquelle aucun élément ne reste dans la même position. La sous-factorielle peut être définie via la relation de récurrence suivante:
!n = (n-1) (!(n-1) + !(n-2))
En fait, la même relation de récurrence vaut pour la factorielle, mais pour la sous-factorielle, nous partons de:
!0 = 1
!1 = 0
(Pour la factorielle, nous aurions, bien sûr, 1! = 1. )
Votre tâche consiste à calculer ! N , étant donné n .
Règles
Comme le factoriel, le sous-factoriel croît très rapidement. C'est bien si votre programme ne peut gérer que les entrées n de telle sorte que ! N puisse être représenté par le type de numéro natif de votre langue. Cependant, votre algorithme doit en théorie fonctionner pour n arbitraire . Cela signifie que vous pouvez supposer que les résultats intégraux et la valeur intermédiaire peuvent être représentés exactement par votre langue. Notez que cela exclut la constante e si elle est stockée ou calculée avec une précision finie.
Le résultat doit être un entier exact (en particulier, vous ne pouvez pas approximer le résultat avec une notation scientifique).
Vous pouvez écrire un programme ou une fonction et utiliser l'une des méthodes standard de réception d'entrée et de sortie.
Vous pouvez utiliser n'importe quel langage de programmation , mais notez que ces failles sont interdites par défaut.
Il s'agit de code-golf , donc la réponse valide la plus courte - mesurée en octets - l'emporte.
Cas de test
n !n
0 1
1 0
2 1
3 2
4 9
5 44
6 265
10 1334961
12 176214841
13 2290792932
14 32071101049
20 895014631192902121
21 18795307255050944540
100 34332795984163804765195977526776142032365783805375784983543400282685180793327632432791396429850988990237345920155783984828001486412574060553756854137069878601