递归的方式重写阶乘的函数,寻找喇叭花数的循环时报错
我用递归的方式重写阶乘的函数,再套用寻找喇叭花数的循环,浏览器就会报错,请问是什么原因?
// function factorial(num) {
// let result = 1;
// for (let i = num; i > 1; i--) {
// result *= i;
// }
// return result;
// }
function factorial(num) {
if (num == 1) return 1;
return num * factorial(num - 1);
}
for (let i = 100; i <= 999; i++) {
let a = parseInt(i / 100);
let b = parseInt(i / 10) % 10;
let c = i % 10;
if (i == factorial(a) + factorial(b) + factorial(c)) console.log(i);
}
chrome 报错如下:
test.html:22 Uncaught RangeError: Maximum call stack size exceeded
at factorial (test.html:22:13)
at factorial (test.html:23:26)
at factorial (test.html:23:26)
at factorial (test.html:23:26)
at factorial (test.html:23:26)
at factorial (test.html:23:26)
at factorial (test.html:23:26)
at factorial (test.html:23:26)
at factorial (test.html:23:26)
at factorial (test.html:23:26)
指向的是 if (num == 1) return 1; 这行代码。
正在回答
同学你好,很抱歉之前老师回答的有问题。
递归代码需要考虑到0的情况,这段代码中没有0的判断,所以会导致报错:超过最大调用堆栈大小
加一个0的判断即可,如下:
自己再测试下。
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星