我花了一段时间,但我终于得到了一个代码的工作版本,以确定一个数组是否包含元素,当以适当的组合总结时,它可以等同于它的最大元素。
我的问题是,为什么我之前的一次尝试(使用.shift()方法而不是.slice()方法,如下面的注释所示)在这个递归函数中运行时会失败。
当我分别尝试这两种组合时,它们的效果似乎相同。有什么想法吗?
function ArrayAdditionI(arr) {
arr.sort(function(a,b){
return a - b;
});
var largest = arr.pop();
function find(array, target){
if(array.length === 0){
return target === 0;
} else {
//working attempt with slice
var element = array[0];
var newArray = array.slice(1);
//first attempt with shift
//var newArray = array;
//var element = newArray.shift();
var newTarget = target - element;
return find(newArray, target) || find(newArray, newTarget);
}
}
return find(arr, largest);
}
//test
console.log(ArrayAdditionI([3,5,-1,8,12]));