递归计算 JavaScript 中整数数组的总和
Recursively calculate the sum of an Array of integers in JavaScript
我想编写一个 JavaScript 程序来计算整数数组的总和递归。
Expected Results
Input: [1, 2, 3, 4, 5, 6]
Output: 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";
}
但我正在寻找使用 递归 的解决方案。
编辑:我开始做上面的练习来练习递归。我很难弄明白。所以,这就是我发布这个的原因。如果你能理解我会很高兴。
提前致谢。
要使用递归,您只需要一个基本案例和将输入转化为可以递归的更小内容的方法。
一个长度为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] ))
当然,您可能需要更好的错误检查,但这应该让您入门。
递归实际上是一个回归问题,
如果名为 'Arr' 的数组只有一个元素 - 这是总和,
现在假设您知道 N 个元素数组的求和公式,
您现在可以使用递归来查找 (N+1) 个元素数组的总和,因为
它只是最后一个元素加上前面 N 的总和,你已经 know/calculated.
附上例子。
在 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));
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];
}
解构语法允许优雅的函数表达式
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
)
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);
}
祝你好运
this is a more beginner-friendly solution :)
// 2. Compute the sum of an array of integers.
<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false">
<div class="snippet-code">
<pre><code>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
我想编写一个 JavaScript 程序来计算整数数组的总和递归。
Expected Results
Input: [1, 2, 3, 4, 5, 6]
Output: 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";
}
但我正在寻找使用 递归 的解决方案。
编辑:我开始做上面的练习来练习递归。我很难弄明白。所以,这就是我发布这个的原因。如果你能理解我会很高兴。
提前致谢。
要使用递归,您只需要一个基本案例和将输入转化为可以递归的更小内容的方法。
一个长度为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] ))
当然,您可能需要更好的错误检查,但这应该让您入门。
递归实际上是一个回归问题, 如果名为 'Arr' 的数组只有一个元素 - 这是总和, 现在假设您知道 N 个元素数组的求和公式,
您现在可以使用递归来查找 (N+1) 个元素数组的总和,因为 它只是最后一个元素加上前面 N 的总和,你已经 know/calculated.
附上例子。 在 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));
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];
}
解构语法允许优雅的函数表达式
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
)
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);
}
祝你好运
this is a more beginner-friendly solution :)
// 2. Compute the sum of an array of integers.
<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false">
<div class="snippet-code">
<pre><code>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