javascript

factorial of a number


I have the following code but it is not giving perfect result for factorial. Can you find it out please?

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


Solution

  • You have to return the value. Here you go:

    function fact(x) {
       if(x==0) {
          return 1;
       }
       return x * fact(x-1);
    }
    
    function run(number) {
        alert(fact(parseInt(number, 10)));
    }
    

    and

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

    (How to make it work for negative numbers I leave up to you ;) (but I showed in this post anyway))

    Just for fun, a more correct, non recursive algorithm:

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