首页 > 解决方案 > 使用递归对 1 和给定数字之间的数字求和 - Javascript

问题描述

在没有递归的情况下对一个和给定数字之间的数字求和很简单:

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)); 

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

标签: javascriptrecursion

解决方案


您可以检查该值,如果真返回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));


推荐阅读