除了递归地进行阶乘,我们如何解决使用for循环?
function factorial(num){
for(var i=num;i>0;i--){
num*=i
}
return num;
}
factorial(3);
//18
答案应为6但打印18
当我运行此代码时,对任何数字x说,因子结果再次乘以x。 factorial(3)给出6 * 3 ...... factorial(5)给出120 * 5.可能是什么问题?谢谢
答案 0 :(得分:1)
您已经将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));
答案 1 :(得分:0)
您使用num初始化i时乘以相同的数字两次,使用i = num-1,如下所示:
function factorial(num){
for(var i=num-1;i>0;i--){
num*=i
}
return num;
}
factorial(3)
答案 2 :(得分:0)
你已经将数字乘以自身,这不需要做。 只需要乘以少于给定数字的数字即可获得阶乘。
以下是相同的代码段:
function factorial(num){
for(var i=num-1;i>0;i--){
num*=i
}
return num;
}
factorial(3);