【发布时间】:2016-03-22 02:38:47
【问题描述】:
调用此递归 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');
}
我怎么知道这个?
【问题讨论】:
-
没有什么要弄清楚的,你有一个无限期调用自己的函数,你传入
50所以没有一个if语句是真的,它走到最后,再次调用这个函数与50相同的事情再次发生。 -
你得到终止条件了吗?最大长度始终相同
-
啊哈,在第一次迭代 maxlength eq NaN 之后。 :) 所以终止条件总是错误的。
-
只是好奇,你能(非正式地)描述一下你的函数应该做什么吗?
-
彼得,恕我直言,如果您在函数体的第一个字符串中插入
console.log(maxlength,num)之类的内容,您将花费更少的时间来解决这个问题。 :)
标签: javascript recursion max