配列と目標 (数値) が与えられた場合、配列から要素を追加することで目標を達成できるかどうかを判断する必要があります。ここに私のコード(JavaScript)といくつかの結果があります:
function check(goal,array) {
function add(sum, array) {
if (sum == goal)
return true;
else if ((sum > goal)||(!array[0]))
return false;
else
console.log(sum); // check where we are
return add(sum + array.shift(),array) || add(sum,array);
}
return add(0,array);
}
check(6,[1,3,5]) を呼び出した後に add() のスタックに起こると予想されること
add(0,[1,3,5]) // log 0
add(1,[3,5]) //log 1
add(1+3,[5]) //log 4
add(1+3+5,[]) //return false
add(1+3,[]) //return false
add(1,[5]) //log 1
add(1+5,[]) //return true
add(1,[])
add[0,[3,5])
add(0+3,[5])
add(0+3+5,[])
add(0+3,[])
add(0,[5])
add(0+5,[])
add(0,[])
実績:
check(6,[1,3,5])
false
0
1
4
check(3,[1,3,5])
false
0
1
1
最初のブランチから離れることはありません。なんで ? 編集: わかりました、提案に基づいて、引数として配列を渡さない方が良いと思います:
function check(goal,array) {
function add(sum, i) {
if (sum == goal)
return true;
else if ((sum > goal)||(i==array.length))
return false;
else
console.log(sum);
return add(sum + array[i],i+1) || add(sum,i+1);
}
return add(0,0);
}
ここではうまく機能します。