如何使用递归函数(javascript)

时间:2017-05-15 08:05:55

标签: javascript loops recursion

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循环做了这个,然后迭代它。问题是,我如何使用递归函数做同样的事情?

2 个答案:

答案 0 :(得分:2)

您只能使用第一个元素进行添加,并再次使用数组的其余部分调用该函数。

在这种情况下,检查长度,如果数组没有项目或项目计数,则返回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

答案 1 :(得分:0)

对于您拥有的输入(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)。