I want to write a factorial function in javascript. I have tried the following:
function factorial(n){
if(n==1){
return 1;
} else {
while(n>=0){
n = n * (n-1);
}
return n;
}
}
It is not working.
Advertisement
Answer
You used while(n>=0) instead of while(n>=2). Using n>=0 will make the end of the while loop multiply n by 0. You should also use the === operator to prevent values that are not numeric. You also forgot to decrease n in the while loop. Try one of the following:
Iteration method:
function factorial(n){
var result = n;
if(n<0){
return null;
}
if(n===1||n===0){
return 1;
} else {
while(n>=2){
result = result * (n-1);
n--;
}
return result;
}
}
<script>
function factorial(n){
var result = n;
if(n<0){
return null;
}
if(n===1||n===0){
return 1;
} else {
while(n>=2){
result = result * (n-1);
n--;
}
return result;
}
}
function calculate(){
var input = document.getElementById("number").value;
if(!isNaN(input)&&input.trim().length){
document.getElementById("result").innerHTML = factorial(parseInt(input, 10));
} else {
document.getElementById("result").innerHTML = "<b style='color: red;'>Input must be a number!</b>";
}
}
</script>
<input type="text" id="number" onkeyup="calculate()">
<br/>
<span id="result"></span>Recursive method:
function factorial(n){
if(n===0||n===1){
return 1;
}
return n*factorial(n-1);
}