この再帰JavaScriptを呼び出すと、「最大呼び出しスタックサイズ超過エラー」というエラーが発生します。再帰により、「最大呼び出しスタックサイズ超過エラー」エラーが発生します。
これは私のコードです:
var num = 12
,maxlength = 50;
var lengths = [5,6,7,8,4,4,5,6,3,3,2,2];
function knap(maxlength,num){
\t if(maxlength==0) return 1;
\t if(maxlength<0||(maxlength>0&&num<1)){
\t \t return 0;
\t }
\t if(knap(maxlength-lengths[num],num-1)){
\t \t console.log(lengths[num]+" ")
\t \t return 1;
\t }
\t return knap(maxlength,num-1);
}
if(knap(maxlength,num)){
\t console.log('Yes');
}else{
\t console.log('No');
}
私はこれを理解できますか?
参照してください、あなたは無限に自分自身を呼び出す関数を持っている、あなたは '50'に渡すので、ステートメントに該当する場合、それは終わりになり、関数を呼び出すのどれも再び「50」と同じ事が繰り返されます。 – adeneo
終了条件は正しいですか? maxlengthは常に同じです –
Aha、最初の反復後maxlength eq NaN。 :)終了条件は常にfalseです。 –