递归触发错误"最大调用堆栈大小超出错误"

时间:2016-03-22 02:38:48

标签: javascript recursion max

我收到错误"超出最大调用堆栈大小错误"在调用这个递归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;
&#13;
&#13;

我怎么能弄清楚这个?

2 个答案:

答案 0 :(得分:1)

第一次调用时,num的函数值超过了数组的长度。因此,maxlength-lengths[num]中的表达式if(knap(maxlength-lengths[num],num-1))是NaN。之后所有的中断递归条件总是错误的。 所以,你可能需要先调用knap(maxlength,num-1)

答案 1 :(得分:0)

这意味着你的代码中的某个地方,你正在调用一个函数,而这个函数又会调用另一个函数,依此类推,直到你达到调用堆栈的限制,而且大部分时间是因为递归。

请参阅Maximum call stack size exceeded error