Parmi les fonctions mathématiques les plus connues et les plus utilisées en combinatoire, en probabilités et en analyse, la factorielle occupe une place de premier plan. Malgré son importance dans de nombreux domaines scientifiques, cette fonction n'est pas toujours intégrée directement aux bibliothèques de base des langages de programmation. Le C++ ne fait pas exception à cette règle et ne propose pas de fonction standard permettant de calculer directement la factorielle d'un nombre entier. Le programmeur doit donc généralement créer sa propre implémentation lorsqu'il souhaite effectuer ce type de calcul.
La factorielle d'un nombre entier positif, notée par un point d'exclamation placé après le nombre, représente le produit de tous les entiers compris entre 1 et cette valeur. Ainsi, 5! correspond à 1 × 2 × 3 × 4 × 5, ce qui donne 120. Cette fonction intervient dans de nombreux calculs mathématiques, notamment les arrangements, les permutations, les combinaisons, les développements en série, certaines distributions statistiques ainsi que dans diverses branches de l'informatique théorique.
L'un des aspects les plus intéressants de la factorielle est sa croissance extrêmement rapide. Même pour des valeurs relativement modestes, les résultats deviennent rapidement très grands. Par exemple, 10! vaut déjà plus de trois millions, tandis que 20! dépasse largement les capacités des types entiers classiques utilisés dans plusieurs langages de programmation. Cette particularité en fait un excellent exemple pour illustrer les limites numériques des ordinateurs et l'importance du choix des types de données.
Le programme C++ présenté ci-dessous utilise une approche récursive particulièrement élégante. La fonction s'appelle elle-même en diminuant progressivement la valeur du paramètre jusqu'à atteindre le cas de base où la factorielle de 0 ou de 1 est égale à 1. Cette méthode reproduit fidèlement la définition mathématique de la factorielle tout en offrant un code très compact et facile à comprendre. Les exemples affichés permettent de générer les treize premiers factoriels entiers et de constater la rapidité avec laquelle les résultats augmentent lorsque la valeur d'entrée devient plus grande :
Essayer maintenant !
on obtiendra le résultat suivant :
Liste des 13 premiers factoriels entiers:0! est 1
1! est 1
2! est 2
3! est 6
4! est 24
5! est 120
6! est 720
7! est 5040
8! est 40320
9! est 362880
10! est 3628800
11! est 39916800
12! est 479001600