我想使用递归来计算从1到100000的总和,但是当我运行以下代码时,浏览器抛出一个异常(Uncaught RangeError:超出最大调用堆栈大小)。
function sum(num){
if(num > 0){
num +=arguments.callee(num-1);
}
return num;
};
sum(100000);
function computeMaxCallStackSize() {
try {
return 1 + computeMaxCallStackSize();
} catch (e) {
// Call stack overflow
return 1;
}
};computeMaxCallStackSize();//output:15624
答案 0 :(得分:1)
你的递归太多了。这是浏览器特定的,不仅是堆栈大小,还有优化,如尾递归优化和东西。我想这里唯一可靠的事情就是以不会将大量内容放入堆栈的方式编写代码,或者手动测试(深入阅读文档)每个浏览器。毕竟,当您看到“太多递归”错误或类似错误时,您已经知道代码存在问题。
以下是您可以采取的措施,以避免过多的递归: