如何编写递归reduce函数?

时间:2016-06-08 03:17:24

标签: javascript recursion reduce

我正在尝试使用递归编写reduce函数。我正在学习递归及其练习的一部分,所以我试图理解它在我的代码中不起作用的是什么。任何帮助都很高兴! PS。它假设从数组的末尾开始(例如,yeh变得嘿)

var strings = function(previous,current) {
    return previous+current;
};

function reducing(arr,start,func) {

    if (arr.length == 0) {
        return start;
    }
    else if (arr.length == 1) {
        return arr[0];
    }
    else {
        return func(start,arr[arr.length-1]) + reducing(arr.slice(1),start,func);
    }
}

reducing(['y','e','h'],'',strings)

2 个答案:

答案 0 :(得分:1)

这可能是问题,而不是减少(arr.slice(1),start,func)尝试减少(arr.slice(0,arr.length-1),start,func),如下所示:

function reducing(arr,start,func) {
  if (arr.length == 0) {
     return start;
  }
  else if (arr.length == 1) {
     return arr[0];
  }
  else {
    return func(start, arr[arr.length-1]) + reducing(arr.slice(0, arr.length -1),start,func);
 }
}

答案 1 :(得分:0)

另一种解决方案:

const reduce = (arr, fn, initial) =>
  (reduceAux = (index, value) =>
    index > arr.length-1
      ? value
      : reduceAux(index+1, fn(value, arr[index], index, value))
  )(0, initial);