【问题标题】:How to write a recursive reduce function?如何编写递归reduce函数?
【发布时间】:2018-02-03 15:26:27
【问题描述】:

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

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)

【问题讨论】:

    标签: javascript recursion reduce


    【解决方案1】:

    这可能是问题所在,而不是 reduction(arr.slice(1),start,func) 尝试 reduce(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);
     }
    }
    

    【讨论】:

    • 对不起,我纠正了代码中的错误。当我们使用第一个元素时,我们需要删除第一个元素,但是当我们使用底部元素时,我们需要从数组中删除底部元素。
    【解决方案2】:

    另一种解决方案:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-15
      • 1970-01-01
      • 2016-08-13
      相关资源
      最近更新 更多