递归会改变.shift()和.slice()从数组中删除元素的方式吗?

时间:2015-11-08 08:30:55

标签: javascript recursion

我花了一段时间,但我终于得到了一个代码的工作版本,以确定一个数组是否包含元素,当以适当的组合总结时,它可以等同于它的最大元素。

我的问题是,为什么我之前的一次尝试(使用.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]));

0 个答案:

没有答案