调用此递归 JavaScript 时,我收到错误“超出最大调用堆栈大小错误”。
这是我的代码:
var num = 12
,maxlength = 50;
var lengths = [5,6,7,8,4,4,5,6,3,3,2,2];
function knap(maxlength,num){
if(maxlength==0) return 1;
if(maxlength<0||(maxlength>0&&num<1)){
return 0;
}
if(knap(maxlength-lengths[num],num-1)){
console.log(lengths[num]+" ")
return 1;
}
return knap(maxlength,num-1);
}
if(knap(maxlength,num)){
console.log('Yes');
}else{
console.log('No');
}
我怎样才能弄清楚这一点?
最佳答案
当你第一次调用你的函数时,num的值超过了lengths数组的长度。所以表达maxlength-lengths[num]
在if(knap(maxlength-lengths[num],num-1))
是 NaN。之后你所有的中断递归条件总是假的。
因此,您可能需要首先调用 knap(maxlength,num-1)
。
关于javascript - 递归触发错误 "Maximum call stack size exceeded error",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36145261/