it-swarm-eu.dev

factorielle d'un nombre

J'ai le code suivant, mais il ne donne pas un résultat parfait pour factorial, pouvez-vous le trouver

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <title> New Document </title>
  <script type="text/javascript">
 function fact(num)
 {
    var x=parseInt(num);
    //alert(x+1);
    if(x>0)
        x=x* fact(x-1);
    alert(x);
 }
  </script>
 </head>

 <body>
 <form name="f1">
  Enter the Number  :<input type="text" length="8" name="txt1"><br>
  <input type="button" value="Find factiorial" onclick="fact(txt1.value)">
  </form>
 </body>
</html>
10
Mihir

Vous devez return la valeur. Voici:

function fact(x) {
   if(x==0) {
      return 1;
   }
   return x * fact(x-1);
}

function run(number) {
    alert(fact(parseInt(number, 10)));
}

et 

<input type="button" value="Find factiorial" onclick="run(txt1.value)">

(Comment le faire fonctionner pour les nombres négatifs, je vous laisse;) (mais j'ai montré dans ce post de toute façon))

Juste pour le plaisir, un algorithme plus correct, non récursif:

function fact(x) {
       if(x == 0) {
           return 1;
       }
       if(x < 0 ) {
           return undefined;
       }
       for(var i = x; --i; ) {
           x *= i;
       }
       return x;
}
23
Felix Kling

Utilisez la boucle est facile à mettre en œuvre 

function fact(num)
{
    if(num<0)
     return "Undefined";
    var fact=1;
    for(var i=num;i>1;i--)
      fact*=i;
    return fact;
 }

<input type="button" value="Find factiorial" onclick="alert(fact(6))">
5
Javed Akram
function factorial(n) {
  return (n != 1) ? n * factorial(n - 1) : 1;
}

alert( factorial(5) );

Vous pouvez essayer d'utiliser la méthode de récursivité 

3
nightmare
  1. Votre fonction ne renvoie rien, jamais.
  2. Que faites-vous quand x vaut 0?
  3. Point mineur - mis à part alert, vous ne faites vraiment rien avec la valeur renvoyée.

Essayez plutôt ceci, si vous voulez (survolez le texte):

if(x==0) return 1;
return x * fact(x-1);

Exemple de travail: http://jsbin.com/apuka3/2

2
Kobi

Vous devez d’abord avoir une return dans votre fonction. ;)

2
Flinsch

J'ai écrit ça et ça marche.

  var d = 1;
  for (num; num > 1; num--) {
    d *= num;
  }
  return d;

1
Jamshid Ajam
function fact(n) {
  if (n > 1) {
    return n * fact(n-1);
  } else {
    return 1;
  }
}
console.log(fact(5));

En utilisant opérateur ternaire nous remplaçons le code ci-dessus par une seule ligne de code comme ci-dessous

function fact(n) {
      return (n != 1) ? n * fact(n - 1) : 1;
 }
console.log(fact(5));
1
Srikrushna Pal

C’est le moyen le plus simple et le plus récent JS (ES6)

factorial = n =>  n - 1 > 0 ? n * factorial(n - 1) : n;

//output
console.log(factorial(5));

Ici, j'ai utilisé la fonction flèche ES6. Pour une meilleure compréhension, veuillez voir quelle est la fonction arrow function .

1
Bijay Pal

Voici une version courte récursive:

function doFact(n) {
  return +!(+(n)) || doFact(n - 1) * n;
}

function factorialFromInput() {
  var theInputVal = document.getElementsByTagName("input")[0].value;
  var theContainer = document.getElementById("resultContainer");
  theContainer.innerHTML = "" + doFact(Math.abs(theInputVal));
}
.wrapper>* {
  line-height: 2em;
  width: 30%;
}
#resultContainer {
  border: outset grey;
  min-height: 1.1em;
  padding-left: 0.3em;
  background-color: #eff0f1;
  overflow: scroll;
}
<div class="wrapper">
  <input type="text" id="valEntered">
  <br>
  <button onclick="factorialFromInput();">Calculate Factorial</button>
  <br>
  <div id="resultContainer"></div>
</div>

1
cssimsek

Je ne suis pas sûr de savoir pourquoi personne n’a eu recours à la programmation dynamique pour répondre à cette question, c’est de loin le moyen le plus efficace de construire quelque chose sur une factorielle à mon avis.

 var mem = [];

 function fact(num)
 {
    var x = parseInt(num);

    if (x == 0 || x == 1) return 1;

    mem[x] = x * fact(x-1);

    return mem[x];
 }
0
Decebal
 <script src="jquery-3.1.0.js"></script>
<script>
    $(function () {
        var target = 5;
        var factorial = 1;
        for (var i = 1; i <= target; i++) {
            factorial *= i;
        }
        alert(factorial);
       });
</script>

vous pouvez définir n'importe quelle valeur dans target et cette logique calculera Factorial.  click to see output screen

Merci... :)

0
Bhanu pratap

Avec une boucle Do, c'est assez facile.

    <table>
    <tr>
        <th>Amount of integers</th>
        <th>Answer</th>
    </tr>
    <tr>
        <th><input id="int" type="number"/></th>
        <th><input id="answer" type="number"/></th>
    </tr>
</table>
<button onclick="calculate()">calculate</button>
<script>
    function calculate() {
        var input = document.getElementById("int").value;
        var int = 1;

        do {
            var product = int *= input;
            input--;
        } while (input > 0);
        answer.value = product;
    }
</script>

Vous commencez par définir un tableau pour qu’il serve de moyen de saisir votre variable et d’avoir un emplacement pour afficher la réponse. Vous ajoutez également un bouton pour exécuter votre fonction.

La variable d'entrée est la valeur entrée par l'utilisateur. Vous avez également int variable comme espace réservé.

À l'intérieur de la boucle do, vous utilisez une autre variable qui est le produit. Elle prend votre variable de marque de réservation et la multiplie par l'entrée. Après cela, l’entrée décroît, tant que la valeur d’entrée est supérieure à zéro, la boucle continue d’itérer.

Puis, à la fin, il affiche la réponse dans la balise id "answer" du tableau.

0
Neil Meyer

un formulaire très simple: 

function fact() {
    var x = document.getElementById("txtf").value;
    var f=1;
    for (var i=1; i <= x ; i++){
        f = f*i;
    }
    document.getElementById('showR').innerHTML= f;
}


 <input type="text" id="txtf" value="3">
   <input type="button" id="btnf" value="click for calculate" onclick="fact()">
   <p id="showR">/Factoriel/</p>
0
Aria Shir
function factorial (n) {
  if (n > 1) {
    return n * factorial(n-1);
  }
  return 1;
}
console.log("recursive way => ",factorial(5)); 
0
Aissam BAHARI

En voici une que j'ai faite en utilisant une boucle while:

function factorialize(num) 
{
  i = 1;
  b = 1;
  while (i < num) {
    b = b + (b * i);
    i = i + 1;
    }
return b;
}
0
Alex G

Qu'en est-il de:

function fact(n) {
  n = Math.round(n);
  if (n < 2) {
    return 1;
  }
  else {
    return n * fact(n - 1);
  }
}

?

0
Anon Ymus

Ma suggestion:

function fact(x) {
    if (x<0) {
        return Infinity
    };
    var _= 1
    for ($=1;$<=x;++$) {
        _*=$
    };
    return _
};

Il retourne simplement la factorielle de ce que "x" soit.

0
ElectroBit

La partie importante de la fonction est cette ligne:

 x = x * fact(x-1);

mais la fonction fact ne renvoie pas de valeur, elle est donc identique à x * undefined. Essayez d’ajouter return x; au bas de votre fonction.

0
Douglas

1) Lorsque X = 0, la fonction doit renvoyer 1; 2) Renvoyer ajouté;

 function fact(num)
 {
    var x=parseInt(num);
    //alert(x+1);
    if(x>0)
        x=x* fact(x-1);
    else
        x=1;
    return x;
 }

usage

<input type="button" value="Find factiorial" onclick="alert(run(fact.value));">
0
Anton
    function factorial(num) {

    var result = 1;

    for (var i = 1; i <= num; i++) {
        result = result * i;

    }

    return result;
}
//call function e.g factorial(4).. 1*2*3*4 it will evaluate in ascending order
0
Mohsan Abbas

Une légère modification du code d'Anton:

function fact(x) {
   if(x>0)
       return x* fact(x-1);
   if(x===0)
       return 1;
   return null;

}

(la factorielle d'un négatif n'existe pas, mais la factorielle de 0 est égale à 1, dans ce cas, si un nombre est inférieur à 0, la fonction retournera null)

0
Dan

La récursivité dans JS est ouverte aux erreurs de débordement de pile et est également très lente. Boucler par d'autres moyens, c'est mieux. Ma contribution au code factoriel serait une ligne unique;

var fact = n => Array(n).fill().reduce((v,_,i) => (i+1) * v || 2);
console.log(fact(5));

0
Redu
function factorial(num){
    if(num<1||typeof num!=='number'){
    return undefined
  }
  if(num===1){
    return num
  }
    return num*factorial(num-1)
}
console.log(factorial(3))

https://jsfiddle.net/mohittadhiyal/6w64x0sL/10/

0
Mohit
var factorialNumber , factorial=1;
factorialNumber=Prompt("Factorial Number" , "write Factorial Number");
for(var i = 1; i<= factorialNumber;i++){
    factorial *= i;
}
alert(factorial);

Le code ci-dessus définit d’abord deux variables, factorialNumber et factorial. factorial est initialisé avec 1. factorialNumber obtiendra le résultat de Prompt (un nombre est attendu), puis, à l'aide d'un cycle, la factorielle est multipliée à chaque étape par l'index de l'étape représenté par i. Une fois calculé avec succès, nous montrons le résultat en utilisant alert.

0
Javidan Akberov