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