除了递归地进行阶乘之外,我们如何使用for循环解决?因子乘以数字本身
function factorial(num){
for(var i=num;i>0;i--){
num*=i
}
return num;
}
factorial(3);
//18
答案应该是6,但打印18
当我运行这段代码说任何数x,阶乘的结果再次通过X相乘。 阶乘(3)给出了6 * 3 ... 阶乘(5)提供了120 * 5.什么可能是问题?.Thanks
除了递归地进行阶乘之外,我们如何使用for循环解决?因子乘以数字本身
function factorial(num){
for(var i=num;i>0;i--){
num*=i
}
return num;
}
factorial(3);
//18
答案应该是6,但打印18
当我运行这段代码说任何数x,阶乘的结果再次通过X相乘。 阶乘(3)给出了6 * 3 ... 阶乘(5)提供了120 * 5.什么可能是问题?.Thanks
您已经NUM作为结果的价值,你这个值再乘以它。你可以用下一个较小的值开始迭代,并按照你已经做的迭代。
function factorial(num) {
for (var i = num - 1; i > 0; i--) {
num *= i;
}
return num;
}
console.log(factorial(3));
随着while
循环,并用一前缀减量较短比较。
function factorial(num) {
var i = num;
while (--i) {
num *= i;
}
return num;
}
console.log(factorial(3));
你乘以本身的数量,这个不用做。 只需要乘以小于给定数字的数字即可得到阶乘。
下面是相同的代码片段:
function factorial(num){
for(var i=num-1;i>0;i--){
num*=i
}
return num;
}
factorial(3);
没有[这](https://www.natashatherobot.com/factorials-javascript-recursion/)帮助? – marcellothearcane
如果你把这行改为'for(var i =(num - 1); i> 0; i--){'它有效。另外,factorial(0)= 1,所以你需要一个if/else语句来排序。 ('if(num === 0){return 1} else {[for loop]}')它不处理负数,这将需要整理出来。 – marcellothearcane