I have the following code but it is not giving perfect result for factorial. Can you find it out please?
function fact(num) {
var x = parseInt(num);
if (x > 0)
x = x * fact(x - 1);
console.log(x);
}
<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>
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;
}