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

时间:2019-06-21 17:50:56

标签: javascript recursion

求一和给定数字之间的数字而无需递归很简单:

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到num之间的整数的简单方法:

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

let sumNumsRecursive = num => num ? sumNumsRecursive(num - 1) + num : 0

console.log(sumNumsRecursive(3));