javascript - 使用递归对 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));
无需将整数添加到数组然后减少它。只需将它们添加到初始化变量中即可。
解决方案
您可以检查该值,如果真返回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));
推荐阅读
- javascript - 获取嵌套 javascript 对象中具有最高属性值的键的名称,
- printf - 来自 device+PYCUDA 的 Hello World
- entity-framework - 如何从 EF 自动设置文本框的 maxlengh 属性?
- java - 如何在片段内使用选项卡式导航布局
- spring - spring boot https PKCS12 DerInputStream.getLength():lengthTag=111,太大
- html - 在 CSS 中按顺序动画元素
- java - 为带注释的 MyBatis 插入指定类型处理程序
- javascript - 如何循环并显示具有 onClick 的按钮并将不同的变量传递给另一个函数?
- python - 如何从 Synthia 数据集中读取标签(注释)文件?
- c# - 使用 Windows 容器在 Docker Desktop 中运行 ASP.NET 时,传出 HTTP 请求超时