【问题标题】: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 积分主义者)。