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