
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.