こんにちは私は再帰を学ぼうとしている初心者です。arr に [4, 6, 23, 10, 1, 3] が含まれている場合、ArrayAdditionI(arr) に組み合わせアルゴリズムに関する関数を記述しようとしています。4 + 6 + 10 + 3 = 23 であるため、出力は true を返す必要があります。23 は配列内の最大数。どの組み合わせも 23 を与えない場合、関数は false を返します。
私のコードでは、 return を使用しようとしましたが、機能しませんでした。次に、それを変更して throw します。throw が機能する理由は理解していますが、return が機能しなかった理由は混乱しています。
動作しているjsのコードは次のとおりです。
function ArrayAdditionI(arr) {
//remove the maximal number from arr
var m = arr[0];
for (var i=0; i<arr.length-1;i++)
m = Number(arr[i]) > Number(arr[i+1]) ? arr[i]:arr[i+1];
arr.splice(arr.indexOf(m),arr.indexOf(m));
//Here the recursion starts:
var combiAdd = function (a){
var sum = 0;
for (var j=0; j<a.length;j++){
sum += a[j];
if (sum == m)
throw true;
else if (sum != m && j==a.length-1){
if (a.length == 1)
throw false;//switch to the "return false;"
else
combiAdd(a.splice(1,a.length));//switch to "return combiAdd(a.splice(1,a.length));
}
}
}
try {
combiAdd(arr);
}
catch(exp){
if (exp !=true && exp!=false)
throw exp;
else
return exp;}
}
動作していない return を含む私のコードは次のとおりです。
//...same code as above
if (a.length == 1) //same code
return false;
else
return combiAdd(a.splice(1,a.length));
[4, 7, 10, 1] のようなおそらく偽の配列に対して未定義のメッセージが表示されます
誰でも私を助けることができますか?ありがとうございました!