Page 1 sur 1
Fonction Récursive et Return objet
Posté : 07 mars 2020, 09:43
par mosbehslim@yahoo.fr
Bonjour
Je viens de débuter en javascript et je bute sur les fonctions. l'exercice et de créer une fonction récursive ( factoriel) et renvoyer le paramètre ainsi que le résultat de la fonction. Ainsi, La fonction Fact(5 ) doit renvoyer {5,120}
function factorial (n) {
if(n == 0) {
return 1
} else {
return{
val:n* factorial(n - 1),
Param:n
}
}
}
La fonction renvoie bien le param mais pour Val elle renvoie NaN
Merci d'avance
Re: Fonction Récursive et Return objet
Posté : 07 mars 2020, 10:51
par webmaster
Bonjour
Il y a une incohérence entre type de paramètre
Soit n est un entier, soit n est un objet avec 2 propriétés val et param
Comme param n'a pas d'interet (c'est la valeur de n en entrée), j'ai modifié la fonction :
Code : Tout sélectionner
<script type="text/javascript">
function factorial(n) {
n=parseInt(n); /* pour s'assurer qu'on a bien un entier */
if (n == 0) {
return 1;
} else {
return n * factorial(n - 1);
}
}
document.write("factorial(1)="+factorial(1)+"<br>"); // 1
document.write("factorial(5)="+factorial(5)+"<br>"); // 120
document.write("factorial(8)="+factorial(8)+"<br>"); // 40320
</script>
Le code s'exécute ici :
https://www.toutjavascript.com/user/factorial.html
Re: Fonction Récursive et Return objet
Posté : 07 mars 2020, 11:10
par mosbehslim@yahoo.fr
Merci infiniment pour votre réponse,
le problème est que je doit renvoyer à la fois le paramètre de la fonction et la valeur du factoriel.
Re: Fonction Récursive et Return objet
Posté : 07 mars 2020, 17:31
par webmaster
C'est possible aussi :
Code : Tout sélectionner
<script type="text/javascript">
function factorial(n) {
if (isFinite(n)) {
console.log(n+" isNumber");
n = { val: parseInt(n), Param: parseInt(n) };
}
if (n.val == 0) {
return {
val: 1,
Param: 0
};
} else {
return {
val: n.val * factorial({val: n.val - 1, Param: n.Param}).val,
Param: n.Param
};
}
}
document.write("factorial(0)="+JSON.stringify(factorial(0))+"<br>"); // 1
document.write("factorial(1)="+JSON.stringify(factorial(1))+"<br>"); // 1
document.write("factorial(5)="+JSON.stringify(factorial(5))+"<br>"); // 120
document.write("factorial(8)="+JSON.stringify(factorial(8))+"<br>"); // 40320
</script>
Mais c'est vraiment très lourd car il faut passer le param initial de factoriel et transmettre un objet
Bref, c'est une solution que je ne préconise pas du tout
J'ai mis à jour la page d'exécution
https://www.toutjavascript.com/user/factorial.html
Re: Fonction Récursive et Return objet
Posté : 07 mars 2020, 19:28
par mosbehslim@yahoo.fr
wow ça fonctionne
merci, tant de chose à comprendre et apprendre, maintenant it's learning time
le plus important et de comprendre pourquoi ma fonction n'a pas marché, comment fonctionne la récursivité en javascript ....