我想写一个JavaScript程序来计算递归的整数数组的和。
输入:1,2,3,4,5,6
输出:21
function calculateSum(array) {
if (array instanceof Array){
if (!array.some(isNaN)) {
var total = 0;
array.forEach(function (value) {
total += value;
});
return total;
}
return "Provide an Array with only Numeric Values";
}
return "Please provide an Array";
}
但我正在寻找一种使用递归的解决方案。
编辑:我开始做上面的练习来练习递归。我很难弄明白这一点。
提前表示感谢。
发布于 2018-07-02 00:19:13
要使用递归,你只需要一个基本情况和方法,将输入分解成一些你可以递归的更小的东西。
长度为1的数组的和就是arr[0]
,对吗?所以这是一个合理的基本情况。对于较大的数组,和是一个元素加上所有其他元素的和。这就是你的另一个例子:arr[0] + sum(everything else)
现在,您可以仅使用这两种情况编写一个简单的函数:
let arr = [1, 2, 3, 4, 5, 6]
function add(arr) {
if (arr.length == 1) return arr[0] // base case
return arr[0] + add(arr.slice(1)) // recurse
}
console.log(add(arr))
这个想法很简单,你可以用一行代码来表达它:
const add = (arr) => arr.length == 1 ? arr[0] : arr[0] + add(arr.slice(1))
console.log(add([1, 2, 3, 4, 5, 6] ))
当然,您可能想要更好的错误检查,但这应该可以让您开始。
发布于 2018-07-03 02:58:00
析构语法允许使用优雅的函数表达式
const None =
Symbol ()
const sum = ([ n = None, ...rest ]) =>
n === None
? 0
: n + sum (rest)
console.log
( sum ([]) // 0
, sum ([ 1 ]) // 1
, sum ([ 1, 2 ]) // 3
, sum ([ 1, 2, 3 ]) // 6
, sum ([ 1, 2, 3, 4 ]) // 10
)
发布于 2018-07-02 00:23:36
现在可以使用递归来查找(N+1)元素数组的和,因为它只是最后一个元素加上前面N个元素的和,这是您已经知道/计算过的。
附上了一个示例。请访问wikipedia了解更多信息。
let arr = [10,100,1000,10000];
function sum(array){
if(array.length === 1){
return array[0];
}else{
return array[array.length-1] + sum(array.slice(0,array.length-1));
}
}
console.log(sum(arr));
https://stackoverflow.com/questions/51124929
复制相似问题