Il existe deux façons d'écrire la fonction factorielle en C :
1. L'approche itérative
// Retourne la factorielle de n (n!)
unsigned long long factorielle(int n) {
unsigned long long result = 1;
for (int i = 1; i <= n; i++) result *= i;
return result;
}
2. L'approche récursive
// Retourne la factorielle de n
unsigned long long factorielle(int n) {
return (n <= 1)?1:n * factorielle(n - 1);
}
Pour écrire une fonction en C qui calcule la factorielle d'un nombre n (notée n! ), on peut utiliser deux approches principales : une approche récursive ou une approche itérative. Voici comment faire les deux :
#include <stdio.h>
// Retourne la factorielle de n (n!)
unsigned long long factorielle(int n) {
// Variable pour le calcul de la factorielle
unsigned long long result = 1;
// Multiplie result par 1, puis 2, puis 3 ...
for (int i = 1; i <= n; i++) {
result *= i;
}
// Retourne le résultat du calcul de la factorielle
return result;
}
// Programme principal
int main() {
int nombre;
// Demande la saisie d'un entier au clavier
printf("Entrez un nombre: ");
scanf("%d", &nombre);
// Si le nombre saisi est négatif, affiche un message d'erreur, sinon affiche la factorielle
if (nombre < 0) {
printf("La factorielle n'est pas définie pour les nombres négatifs.\n");
} else {
printf("La factorielle de %d est %llu\n", nombre, factorielle(nombre));
}
return 0;
}
#include <stdio.h>
// Retourne la factorielle de n
unsigned long long factorielle(int n) {
// Par convention, 0! et 1! sont égales à 1
if (n <= 1) {
return 1;
} else {
// Appel récursif de la fonction factorielle n! = n x (n-1)!
return n * factorielle(n - 1);
}
}
// Programme principal
int main() {
int nombre;
// Demande la saisie d'un entier au clavier
printf("Entrez un nombre: ");
scanf("%d", &nombre);
// Si le nombre saisi est négatif, affiche un message d'erreur, sinon affiche la factorielle
if (nombre < 0) {
printf("La factorielle n'est pas définie pour les nombres négatifs.\n");
} else {
printf("La factorielle de %d est %llu\n", nombre, factorielle(nombre));
}
return 0;
}
Version itérative : Cette version utilise une boucle for
pour multiplier successivement les nombres de 1
à n
, stockant le résultat dans la variable result
.
Version récursive : Cette version fait appel à la fonction factorielle
elle-même jusqu'à ce que la condition de base (n <= 1
) soit atteinte. La factorielle de n
est alors le produit de n
et de la factorielle de n-1
.
unsigned long long
est utilisé pour gérer des nombres potentiellement grands, car les factorielles peuvent croître rapidement en taille.1
pour des valeurs négatives ou 0
, car la factorielle n'est pas définie pour ces valeurs. Dans l'exemple donné, un message d'erreur est affiché si l'utilisateur entre un nombre négatif.