嗨,我是一个尝试学习递归的初学者。我正在尝试在 ArrayAdditionI(arr) 中编写一个关于组合算法的函数,如果 arr 包含 [4, 6, 23, 10, 1, 3] 输出应该返回 true,因为 4 + 6 + 10 + 3 = 23. 23 是数组中的最大数。如果没有组合给出 23,则函数返回 false。
在我的代码中,我尝试使用 return 但没有用,然后我将其更改为使其正常工作。我理解为什么 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;}
}
这是我的代码,返回不起作用:
//...same code as above
if (a.length == 1) //same code
return false;
else
return combiAdd(a.splice(1,a.length));
对于像 [4, 7, 10, 1] 这样的所谓错误数组,它给了我未定义的消息
谁能帮我?谢谢!