递归计算 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
    package Map;
    import java.util.Scanner;
    public class Practice6 { 
        public int sum(int [] temp){
            if(temp.length>0) {
                int value = 0;
                for (int i = 0; i < temp.length; i++) {
                    value += temp[i];
                }
                return value;
            }return 0;
        }
        
        public static void main(String[] args) {
            Scanner sc= new Scanner(System.in);
            System.out.println("Enter the array: ");
            int x= sc.nextInt();
            int [] data= new int[x];
            for(int m=0; m<data.length;m++){
                System.out.println("Enter the number "+m);
                data[m]= sc.nextInt();
            }
            Practice6 practice6= new Practice6();
            System.out.println(practice6.sum(data));
        }
    }

常量数组 = [1, 2, 3, 4, 5, 6] //求和(数组) // return 21

function sum(array) {
    if (array.length == 1) {
        return array[0] // base case (exist condition)
    }
    else{
        return array[0] + sum(array.slice(1))  // recursion starts
    }

    
}
console.log(sum(array)