我收到错误"超出最大调用堆栈大小错误"在调用这个递归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');
}
&#13;
我怎么能弄清楚这个?
答案 0 :(得分:1)
第一次调用时,num的函数值超过了数组的长度。因此,maxlength-lengths[num]
中的表达式if(knap(maxlength-lengths[num],num-1))
是NaN。之后所有的中断递归条件总是错误的。
所以,你可能需要先调用knap(maxlength,num-1)
。
答案 1 :(得分:0)
这意味着你的代码中的某个地方,你正在调用一个函数,而这个函数又会调用另一个函数,依此类推,直到你达到调用堆栈的限制,而且大部分时间是因为递归。