我想编写一个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";
}
但是我正在寻找使用递归的解决方案。
编辑:我开始做以上练习,练习递归。我很难弄清楚这一点。所以,这就是为什么我发布这个。如果您理解我会很高兴。
谢谢。
答案 0 :(得分:2)
要使用递归,您只需要一个基本情况和一种方法即可将输入溢出到较小的可以递归的位置。
长度为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] ))
当然,您可能需要更好的错误检查,但这应该可以帮助您开始。
答案 1 :(得分:1)
递归实际上是一个回归问题, 如果名为“ Arr”的数组只有一个元素-这是总和, 现在假设您知道N个元素的数组的求和公式,
您现在可以使用递归来查找(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));
答案 2 :(得分:1)
解构语法可以优雅地表达功能
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
)
答案 3 :(得分:0)
var arr = [1, 2, 3, 4, 5];
function add(arr) {
if(arr.length>1) {
arr[0] += arr.splice(1,1)[0];
return add(arr);
} else
return arr[0];
}
答案 4 :(得分:0)
this is a more beginner-friendly solution :)
// 2. Compute the sum of an array of integers.
var sum = function (array) {
var total = 0;
for (var n = 0; n < array.length; n++) {
// terminating case
if (n === array.length - 1) {
// console.log('last', total, array[n]);
total = total + array[n];
} else {
// recursive case
// console.log('befoer ', total, array[n]);
total = total + array[n] + sum(array[n + 1]);
}
}
return total;
};
sum([1,2,3,4,5,6]); // 21
答案 5 :(得分:-1)
var numbers= [1,2,3,4,5,6];
sum=0;
function x(a,b){
return a+b;
}
for (a in numbers){
sum = x(numbers[a],sum);
console.log(sum);
}
祝你好运