IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Fonction factoriel d'un nombre


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 45
    Points : 37
    Points
    37
    Par défaut Fonction factoriel d'un nombre
    Bonjour à tous,

    J'essaye de faire une fonction qui est censée donner le factoriel du nombre passé en argument.
    Le problème est que le firebug de firefox se met à planter et la console de chrome ne fait rien.
    Je me doute bien que j'ai fait une (ou plusieurs) erreurs mais impossible de trouver laquelle.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function fact(n){
        if(Math.round(n)==n){
          var i=1
          while(i<n-1){
    	n= n+n*i;
    	i=i+1;
          }
          console.log(n);
        }
        else{
          return undefined;
        }
    }		
    fact(5);

  2. #2
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 115
    Points : 125
    Points
    125
    Par défaut
    Tu restes dans la boucle tant que i est plus petit que n
    Sauf que i s'incrément de 1 à chaque tour, tandis que n augmente beaucoup plus rapidement.
    Par conséquent, i ne parvient jamais à rattraper n et tu restes dans la boucle.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 45
    Points : 37
    Points
    37
    Par défaut
    Merci c'était tout bête j'ai donc appliqué les modifications suivantes et tout roule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function fact(n){
    	if(Math.round(n)==n){
    		var i=1
    		var entree=n;
    		while(i<entree-1){
    			n= n+n*i;
    			i=i+1;
    		}
    		console.log(n);
    	}
    	else{
    		return undefined;
        }
    }		
    fact(5);

  4. #4
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Juste pour information, la fonction factorielle est l'exemple idéal de fonction récursive :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function fact(n){
         return n>1 ? n*fact(n-1) : 1;
    }

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Un petit programme complet pour ceux qui voudraient le tester sur la console d'un navigateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    var nb = window.prompt("entrez un entier naturel positif ou nul","");
    n = Number(nb);
    function factoriel(x){
        if(x<0) throw new Error("factoriel n'est définie que pour les entiers positifs");
        if(x<=1)return 1;
        else return x*factoriel(x-1);
    }
    try {
        R=factoriel(n); 
        window.alert("factoriel("+n+") = "+R);
    }
    catch(e) {
        if (e instanceof Error) { 
            window.alert(e.name + " : " + e.message);
        }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction de conversion de nombre en lettres
    Par david_chardonnet dans le forum Langage
    Réponses: 21
    Dernier message: 08/12/2021, 17h51
  2. factoriel d'un nombre
    Par etoile1506 dans le forum C
    Réponses: 10
    Dernier message: 03/12/2005, 15h46
  3. fonction pour compter le nombre de checkbox coché ?
    Par Death83 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 15/09/2005, 11h28
  4. [VB6]fonction inverse de Hex (nombres hexadécimaux)
    Par Guigui_ dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 08/10/2002, 19h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo