Fonction Récursive et Return objet

Pour toutes les discussions javascript, jQuery et autres frameworks
Répondre
mosbehslim@yahoo.fr
Messages : 3
Enregistré le : 07 mars 2020, 00:40

Fonction Récursive et Return objet

Message par mosbehslim@yahoo.fr » 07 mars 2020, 09:43

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

Avatar du membre
webmaster
Administrateur du site
Messages : 179
Enregistré le : 28 févr. 2017, 15:19

Re: Fonction Récursive et Return objet

Message par webmaster » 07 mars 2020, 10:51

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
TJS : 20 ans et mon livre Tout JavaScript chez Dunod
https://www.toutjavascript.com/livre/index.php

mosbehslim@yahoo.fr
Messages : 3
Enregistré le : 07 mars 2020, 00:40

Re: Fonction Récursive et Return objet

Message par mosbehslim@yahoo.fr » 07 mars 2020, 11:10

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.

Avatar du membre
webmaster
Administrateur du site
Messages : 179
Enregistré le : 28 févr. 2017, 15:19

Re: Fonction Récursive et Return objet

Message par webmaster » 07 mars 2020, 17:31

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
TJS : 20 ans et mon livre Tout JavaScript chez Dunod
https://www.toutjavascript.com/livre/index.php

mosbehslim@yahoo.fr
Messages : 3
Enregistré le : 07 mars 2020, 00:40

Re: Fonction Récursive et Return objet

Message par mosbehslim@yahoo.fr » 07 mars 2020, 19:28

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 ....

Répondre