嗨,我是一個試圖學習遞歸的初學者。如果arr包含[4,6,23,10,1,3]輸出應該返回true,因爲4 + 6 + 10 + 3 = 23,我試圖在ArrayAdditionI(arr)中編寫關於組合算法的函數。23數組中的最大數量。如果沒有組合給出23,則該函數返回false。在javascript中返回或拋出遞歸算法的差異
在我的代碼中,我試圖使用返回,但沒有工作,然後我改變它扔它的作品。 我明白爲什麼投擲作品,但很困惑爲什麼回報不起作用。
這裏是我的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;}
}
這裏是我的代碼與回報不工作:
//...same code as above
if (a.length == 1) //same code
return false;
else
return combiAdd(a.splice(1,a.length));
它給了我不確定消息的所謂虛假陣列狀[ 4,7,10,1]
任何人都可以幫助我嗎?謝謝!
你確實有'返回combiAdd(a.splice(1,則爲a.length));'在你的實際代碼,而不僅僅是'combiAdd(a.splice(1,則爲a.length));' , 對?最可能的錯誤似乎是你忘了放'return',但是當你寫你的StackOverflow後,你記得返回值。 – user2357112
你可能想'arr.splice(arr.indexOf(m),1);'而不是'arr.splice(arr.indexOf(m),arr.indexOf(m));'。第二個參數是一個元素數,而不是元素索引。 –