我的JavaScript阶乘程序仅返回1,请求排查代码问题
问题分析与修复
嘿,我一眼就发现你的阶乘函数为啥总是返回1了——for循环的条件写反啦!
问题根源
看你代码里的循环部分:
for (var i = num; i <= 1; i--) { factorialValue *= i; }
当你传入num=10时,初始的i是10,这时候判断10 <= 1显然不成立,循环直接跳过了!factorialValue一直保持初始值1,所以不管你传什么正数进去,都会返回1。
修复方案
把循环条件改成i >= 1,这样循环才会从num开始,一直递减到1,依次相乘:
function factorial(num) { var factorialValue = 1; if (num === 0) { return factorialValue; } else { // 修正循环条件为i >= 1 for (var i = num; i >= 1; i--) { factorialValue *= i; } return factorialValue; } }
测试验证
现在运行你的测试代码:
console.log(factorial(10)); // 输出3628800 console.log(factorial(5)); // 输出120 console.log(factorial(3)); // 输出6 console.log(factorial(0)); // 输出1
所有结果都符合预期啦!
另外提个小建议:你可以给函数里的变量改个更清晰的名字,比如把factorialValue改成result,可读性会更好哦~
内容的提问来源于stack exchange,提问作者ipsae
相关产品推荐
相关产品推荐

