使用递归对 1 和给定数字之间的数字求和 - Javascript



1 和给定数字之间的数字求和而不递归很简单:

function sumNums (num) {
  let array = [];
  for (let i = 0; i <= num; i++) {
    array.push(i);
  }
  return array.reduce((a, b) => a + b);
}
console.log(sumNums(3)); 

6

但我不明白的是,当我们使用递归时,它会导致"循环"在整个函数中发生。

因此,如果我们在使用递归的函数中有一个 for 循环(或任何循环(,它会导致错误 - 对吧?

我假设我们需要一个整数数组来减少它们 - 那么知道如何在不使用某种循环的情况下创建一个介于 1 和给定数字之间的整数数组吗?

编辑:一种更简单的方法,可以在 1 和 num 之间添加整数而不进行递归:

function sumNums (num) {
  let sum = 0;
  for (let i = 1; i <= num; i++) {
    sum += i;
  }
  return sum;
}
console.log(sumNums(3)); 

无需将整数添加到数组中,然后减少它。只需将它们添加到初始值设定项变量即可。

您可以检查值,如果 truey 返回 n 加上 n - 1 的总和。

function sum(n) {
    return n && n  + sum(n - 1);
}
console.log(sum(3));

更传统的方法采用移交的值并检查该值是否小于 1 并在这种情况下返回零,否则是实际值的结果加上调用具有递减值的 sum 函数的结果。

function sum(n) {
    if (n < 1) return 0;    // exit condition
    return n  + sum(n - 1); // return value plus result of recursive call
}
console.log(sum(3));

let sumNumsRecursive = num => num ? sumNumsRecursive(num - 1) + num : 0
console.log(sumNumsRecursive(3)); 

最新更新