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