Piscine 42 C05 : les exercices corrigés
Le projet C05 se concentre sur l’utilisation de la récursion pour résoudre des problèmes mathématiques classiques, tels que le calcul de la factorielle ou des puissances. Découvres ci-dessous les solutions détaillées et commentées pour le projet C05 de la Piscine de l’école 42.
C05 ex00 : ft_iterative_factorial
🎯 Objectif de ft_iterative_factorial
L’objectif de cet exercice est d’écrire une fonction itérative qui calcule la factorielle d’un nombre donné. La fonction renvoie le résultat de la factorielle du nombre passé en paramètre. Si l’argument n’est pas valide (par exemple, s’il est négatif), la fonction doit renvoyer 0
.
🎓 Notions essententielles
- La factorielle d’un nombre : Comprendre que la factorielle d’un nombre
n
, notéen!
, est le produit de tous les entiers de1
àn
. Par exemple,5! = 5 * 4 * 3 * 2 * 1 = 120
. - Les boucles : Utiliser une boucle itérative (par exemple,
while
oufor
) pour calculer la factorielle en multipliant successivement les entiers. - Les cas particuliers : Gérer les cas où l’argument est
0
,1
ou un nombre négatif.
💻 Fonctionnement de ft_iterative_factorial
Prototype de la fonction :
La fonction doit être déclarée comme suit : int ft_iterative_factorial(int nb);
. Elle prend un seul paramètre, un entier nb
, et renvoie un entier représentant la factorielle de nb
.
Gestion des cas particuliers :
Si nb
est négatif, la fonction doit immédiatement renvoyer 0
, car la factorielle n’est pas définie pour les nombres négatifs. La factorielle de 0
est définie comme étant 1
.
Calcul de la factorielle :
Utiliser une boucle pour multiplier successivement les entiers de 1
à nb
. Initialiser un résultat à 1
et multiplier ce résultat par chaque entier jusqu’à nb
.
✅ Le code de ft_iterative_factorial :
int ft_iterative_factorial(int nb)
{
int i;
int res;
i = 0;
res = 1;
if (nb < 0)
return (0);
while (++i <= nb)
{
res *= i;
}
return (res);
}
💡Fonction Main pour tester ft_iterative_factorial
#include
int main(void)
{
printf("%d\n", ft_iterative_factorial(5));
}
C05 ex01 : ft_recursive_factorial
🎯 Objectif de ft_recursive_factorial
L’objectif de cet exercice est d’écrire une fonction récursive qui calcule la factorielle d’un nombre donné. La fonction renvoie le résultat de la factorielle du nombre passé en paramètre. Si l’argument n’est pas valide (par exemple, s’il est négatif), la fonction doit renvoyer 0
.
🎓 Notions essententielles
- La récursion : Comprendre le concept de récursion, où une fonction s’appelle elle-même jusqu’à ce qu’une condition de terminaison soit atteinte.
- La factorielle d’un nombre : Comprendre que la factorielle d’un nombre
n
(notéen!
) est le produit de tous les entiers de1
àn
. La définition récursive estn! = n * (n-1)!
avec0! = 1
. - Les cas particuliers : Gérer les cas où l’argument est
0
,1
ou un nombre négatif.
💻 Fonctionnement de ft_recursive_factorial
Prototype de la fonction :
La fonction doit être déclarée comme suit : int ft_recursive_factorial(int nb);
. Elle prend un seul paramètre, un entier nb
, et renvoie un entier représentant la factorielle de nb
.
Gestion des cas particuliers :
Si nb
est négatif, la fonction doit immédiatement renvoyer 0
, car la factorielle n’est pas définie pour les nombres négatifs. La factorielle de 0
est définie comme étant 1
.
Calcul récursif de la factorielle :
Si nb
est supérieur à 1
, la fonction doit retourner nb * ft_recursive_factorial(nb - 1)
. La récursion se termine lorsque nb
est égal à 0
, où la fonction retourne 1
.
✅ Le code de ft_recursive_factorial :
int ft_recursive_factorial(int nb)
{
if (nb < 0)
return (0);
if (nb == 0)
return (1);
else
return (nb * ft_recursive_factorial(nb - 1));
}
💡Fonction Main pour tester ft_recursive_factorial
int main(void)
{
printf("5! = %d\n", ft_recursive_factorial(5)); // Devrait afficher "5! = 120"
printf("0! = %d\n", ft_recursive_factorial(0)); // Devrait afficher "0! = 1"
printf("-5! = %d\n", ft_recursive_factorial(-5)); // Devrait afficher "-5! = 0"
return (0);
}
C05 ex02 : ft_iterative_power
🎯 Objectif de ft_iterative_power
L’objectif de cet exercice est d’écrire une fonction itérative qui calcule la puissance d’un nombre donné. La fonction doit renvoyer le résultat de l’opération nb
élevé à la puissance power
. Si power
est inférieur à 0, la fonction doit renvoyer 0
. Si power
est égal à 0, la fonction doit renvoyer 1
(car n’importe quel nombre élevé à la puissance 0 est 1, par convention).
🎓 Notions essententielles
- Les puissances : Comprendre que la puissance
power
denb
est égale ànb
multiplié par lui-mêmepower
fois. Par exemple,nb^3 = nb * nb * nb
. - Les boucles : Utiliser une boucle itérative pour multiplier successivement le nombre
nb
par lui-même,power
fois. - Les cas particuliers : Gérer les cas où
power
est0
, un nombre négatif, ou d’autres valeurs particulières.
💻 Fonctionnement de ft_iterative_power
Prototype de la fonction :
La fonction doit être déclarée comme suit : int ft_iterative_power(int nb, int power);
. Elle prend deux paramètres : un entier nb
(la base) et un entier power
(l’exposant), et renvoie un entier représentant le résultat de nb
élevé à la puissance power
.
Gestion des cas particuliers :
- Si
power
est inférieur à0
, la fonction doit renvoyer0
, car les puissances négatives ne sont pas gérées dans cet exercice. - Si
power
est égal à0
, la fonction doit renvoyer1
, conformément à la convention mathématique.
- Si
Calcul de la puissance :
- Initialiser une variable
result
à1
. - Utiliser une boucle pour multiplier
result
parnb
,power
fois. - Retourner
result
après la boucle.
✅ Le code de ft_iterative_power :
int ft_iterative_power(int nb, int power)
{
int result;
if (power < 0)
return 0;
result = 1;
while (power > 0)
{
result *= nb;
power--;
}
return result;
}
💡Fonction Main pour tester ft_recursive_power
int main(void)
{
printf("2^3 = %d\n", ft_iterative_power(2, 3)); // Devrait afficher "2^3 = 8"
printf("5^0 = %d\n", ft_iterative_power(5, 0)); // Devrait afficher "5^0 = 1"
printf("10^-2 = %d\n", ft_iterative_power(10, -2)); // Devrait afficher "10^-2 = 0"
return (0);
}
C05 ex03 : ft_recursive_power
🎯 Objectif de ft_recursive_power
L’objectif de cet exercice est d’écrire une fonction récursive qui calcule la puissance d’un nombre donné. La fonction doit renvoyer le résultat de l’opération nb
élevé à la puissance power
. Si power
est inférieur à 0, la fonction doit renvoyer 0
. Si power
est égal à 0, la fonction doit renvoyer 1
(car n’importe quel nombre élevé à la puissance 0 est 1, par convention).
🎓 Notions essententielles
- La récursion : Comprendre le concept de récursion, où une fonction s’appelle elle-même jusqu’à ce qu’une condition de terminaison soit atteinte.
- Les puissances : Comprendre que la puissance
power
denb
est égale ànb
multiplié par lui-mêmepower
fois. Par exemple,nb^3 = nb * nb * nb
. - Les cas particuliers : Gérer les cas où
power
est0
, un nombre négatif, ou d’autres valeurs particulières.
💻 Fonctionnement de ft_recursive_power
Prototype de la fonction :
La fonction doit être déclarée comme suit : int ft_recursive_power(int nb, int power);
. Elle prend deux paramètres : un entier nb
(la base) et un entier power
(l’exposant), et renvoie un entier représentant le résultat de nb
élevé à la puissance power
.
Gestion des cas particuliers :
- Si
power
est inférieur à0
, la fonction doit renvoyer0
, car les puissances négatives ne sont pas gérées dans cet exercice. - Si
power
est égal à0
, la fonction doit renvoyer1
, conformément à la convention mathématique.
- Si
Calcul récursif de la puissance :
Si power
est supérieur à 0
, la fonction doit retourner nb * ft_recursive_power(nb, power - 1)
. La récursion se termine lorsque power
est égal à 0
, où la fonction retourne 1
.
✅ Le code de ft_recursive_power :
int ft_recursive_power(int nb, int power)
{
if (power < 0)
return (0);
if (power == 0)
return (1);
return (nb * ft_recursive_power (nb, power -1));
}
💡Fonction Main pour tester ft_recursive_power
#include
int main(void)
{
printf("5^2 = %d\n", ft_recursive_power(5, 2));
printf("5^0 = %d\n", ft_recursive_power(5, 0));
printf("5^-1 = %d\n", ft_recursive_power(5, -1));
printf("5^5 = %d\n", ft_recursive_power(5, 3));
}