ChronoMath, une chronologie des MATHÉMATIQUES
à l'usage des professeurs de mathématiques, des étudiants et des élèves des lycées & collèges
 

  Calcul récursif de n!  (JavaScript)       
    
Calcul récursif de n! sur tableur , Calcul itératif multiprécision en JavaScript

Depuis Kramp, le produit des n premiers entiers naturels est noté :

n! = 1 x 2 x 3 x x n   avec la convention : 0! = 1! = 1.

Sa programmation itérative est triviale, tout autant que sa programmation récursive qui s'avère incontournable aux débutants en programmation et constitue, avec le PGCD, l'une des deux tartes à la crème de la programmation récursive...

Cahier des charges :

Si vous séchez après avoir bien cherché :
© Serge Mehl - www.chronomath.com

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

Solution itérative :
 

<SCRIPT LANGUAGE=JavaScript>
function OnYva()
{
nb=10
nb=prompt("Entrez votre nombre :",nb)
alert(nb+" ! = "+ fac(nb))
}

function fac(n)
{
if (n<=1) {return 1} else
{
f=1; for(i=1;i<=n;i++) {f=f*i}
return f
}
}
</SCRIPT>

 Afin de ne pas alourdir le programme qui se veut simple et pédagogique, on ne prévoit pas de test à l'entrée du nombre nb par l'utilisateur.

On peut rajouter un contrôle sur la nature entière et positive de n de la façon suivante...



La variable nb étant déclarée égale à 10, elle sera considérée, a priori, comme numérique. L'instruction eval n'est donc pas nécessaire.

 
Solution récursive :
 

<SCRIPT LANGUAGE=JavaScript>
function OnYva2()
{
nb=10
nb=prompt("Entrez votre nombre :",nb)
alert(nb+" ! = "+ facto(nb))
}

function facto(n)
{
if (n<=1) {return 1} else {return n*facto(n-1)}
}
</SCRIPT>

 Code HTML du formulaire permettant de lancer les calculs à la demande :

<FORM ACTION="" METHOD=POST>
<CENTER>
<INPUT TYPE=button NAME=Bouton VALUE="Lancer le programme" onclick="OnYva2()">
</CENTER>
</FORM>



 
Solution itérative JavaScript + contrôle d'entrée :
 

<SCRIPT LANGUAGE=JavaScript>
function OnYva3()
{
nb=10
nb=prompt("Entrez votre nombre :",nb)
if (nb==null) {return}
if (isNaN(nb))
{
alert("Entrez un NOMBRE !!");return
}
if(nb<0)
{
alert("Entrez un entier POSITIF !!");return
}
if(nb!= Math.floor(nb))
{alert("Entrez un nombre ENTIER positif !!");return
}
alert(nb+" ! = "+ fac(nb))
}

</SCRIPT>

 Ce programme vérifie la validité du nombre entré par l'utilisateur. Il appelle la fonction fac décrite ci-dessus. On a distingué volontairement les 3 types d'erreur par 3 alertes distinctes.

Une autre erreur, non testée ici, est celle consistant à entrer un nombre comme 3,5 en utilisant la virgule au lieu du point décimal. Ce type d'erreur peut être géré au moyen d'instructions relatives aux chaînes de caractères.




© Serge Mehl - www.chronomath.com