Parmi les fonctions les plus connues et les plus utilisées des mathématiques discrètes, la factorielle occupe une place particulièrement importante. Cette fonction intervient dans de nombreux domaines tels que les probabilités, les statistiques, l'analyse combinatoire, la théorie des graphes et même certains calculs de physique et d'informatique. Malgré son importance fondamentale et sa présence dans d'innombrables formules mathématiques, il est étonnant de constater qu'elle n'est généralement pas intégrée directement dans les bibliothèques de base de nombreux langages de programmation. Le langage Delphi ne fait pas exception à cette règle et ne propose pas, dans ses fonctions standard, une routine prédéfinie permettant de calculer une factorielle.
La définition de la factorielle est pourtant relativement simple. Pour un entier positif donné, elle consiste à multiplier ce nombre par tous les entiers positifs qui le précèdent jusqu'à 1. Ainsi, la factorielle de 5, notée 5!, correspond au calcul 5 × 4 × 3 × 2 × 1, ce qui donne le résultat 120. Par convention, la factorielle de 0 est égale à 1, une propriété essentielle qui simplifie de nombreuses démonstrations mathématiques et applications algorithmiques.
Du point de vue de la programmation, la factorielle constitue également un excellent exemple pour illustrer le principe de la récursivité. Une fonction récursive peut s'appeler elle-même jusqu'à atteindre une condition d'arrêt bien définie. Dans le cas de la factorielle, chaque appel calcule le produit du nombre courant par la factorielle du nombre précédent, jusqu'à ce que la valeur atteigne 1 ou 0. Cette approche permet d'obtenir un code particulièrement compact tout en reflétant directement la définition mathématique de la fonction.
Le programme Delphi présenté ci-dessous met en oeuvre cette technique afin de calculer automatiquement les factorielles des premiers entiers naturels. Les résultats obtenus montrent à quel point les valeurs augmentent rapidement lorsque le nombre de départ devient plus grand. À l'aide de ce code source Delphi, vous pourrez ainsi découvrir ou redécouvrir le fonctionnement de la fonction factorielle tout en observant l'une des applications les plus classiques de la récursivité en programmation :
- Program FactorialSamples;
-
- {$APPTYPE CONSOLE}
-
- Uses SysUtils;
-
- Function Factoriel(N:Real):Real;Begin
- If N > 1Then Factoriel := n * Factoriel(N - 1)
- Else Factoriel := 1;
- End;
-
- Var
- I:Byte;
-
- BEGIN
- WriteLn('Liste des 16 premiers factoriels entiers:');
- For I := 0 to 15 do Begin
- WriteLn(I,'! est ',Factoriel(I):1:0);
- End;
- END.
on obtiendra le résultat suivant :
Liste des 16 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
13! est 6227020800
14! est 87178291200
15! est 1307674368000