【问题标题】:How to ilterate with recursive function (javascript)如何使用递归函数进行过滤(javascript)
【发布时间】:2017-05-15 08:05:54
【问题描述】:

function numberSum(num) {

  var str = num.toString();
  var arrNum = str.split('').map(Number);//arrNum = [1, 2, 3];

  //For-looping
  var result = 0;
  for (var i = 0; i < arrNum.length; i++) {
    result = result + arrNum[i];
  }
  return result;
}


console.log(numberSum(22222)); // 2 + 2 + 2 + 2 + 2 = 10

我用 For-looping 做了这个,然后迭代它。问题是,我如何使用递归函数做同样的事情?

【问题讨论】:

标签: javascript loops recursion


【解决方案1】:

您可以仅使用第一个元素进行添加,然后再次使用数组的其余部分调用该函数。

在这种情况下,检查长度,如果数组没有项或项计数,则返回0,然后进行移位,返回数组的第一项。另外,该函数会使用缩减后的数组再次调用。

function iter(array) {
    return array.length && array.shift() + iter(array);
    //     ^^^^^^^^^^^^                                 exit condition,
    //                                                  if zero, return zero, 
    //                                                  otherwise return the
    //                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^  iteration part
    //                                                  return the first value and
    //                                                  call recursion again
}

function numberSum(v) {
    function iter(array) {
        return array.length && array.shift() + iter(array);
    }

    return iter(v.toString().split('').map(Number));
}

console.log(numberSum(22222)); // 2 + 2 + 2 + 2 + 2 = 10

【讨论】:

    【解决方案2】:

    对于您的输入 (22222),您的函数是一个实用的解决方案。如果你想要一个接受一个数字并将自身相加一定次数的函数,你可以简单地这样做......

    function sums(a, b) {
        return a * b;
    }
    sums(2, 5);
    //=> 10
    

    但如果您确实需要一个递归函数的示例来执行此操作,则以下将达到相同的结果...

    var num = 2;
    var iterate = 5;
    
    function sums(n, count, total) {
        if (count === 0) {
            return total;
        } else {
            return sums(n, --count, total+n);
        }
    }
    console.log(sums(num, iterate, 0));
    //=> 10
    

    希望对您有所帮助。 :)

    (请参阅此 blog post on JavaScript recursion 积分主义者)。

    【讨论】:

      猜你喜欢
      • 2019-06-26
      • 2020-09-09
      • 2010-09-20
      • 2015-02-12
      • 2012-09-07
      • 1970-01-01
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多