解释此javascript代码如何对两个数字及其之间的数字求和
我正在上javascript课程,目前正在做一些小项目 其中一个项目是: 给定两个整数,可以是正整数,也可以是负整数,求它们之间所有数字的和并返回。如果两个数字相等,则返回a或b 我找到的解决方案之一是:解释此javascript代码如何对两个数字及其之间的数字求和,javascript,loops,Javascript,Loops,我正在上javascript课程,目前正在做一些小项目 其中一个项目是: 给定两个整数,可以是正整数,也可以是负整数,求它们之间所有数字的和并返回。如果两个数字相等,则返回a或b 我找到的解决方案之一是: function GetSum(a, b) { if(a == b) { return a } else if (a < b) { return a + GetSum(a+1, b) } else { ret
function GetSum(a, b) {
if(a == b) {
return a
}
else if (a < b) {
return a + GetSum(a+1, b)
} else {
return a + GetSum(a-1, b)
};
}
console.log(GetSum(-1, 2));
函数GetSum(a,b){
如果(a==b){
归还
}
否则如果(a
请,我想解释一下为什么代码可以工作
…我想知道为什么下面的代码总是返回0我们可以将代码简化为:
function getSum( a,b ){
if (a == b) return a; //(1)
if (a < b) {
return a + getSum(a+1, b); //(2)
}else {
return a + getSum(a-1,b); //(3)
}
}
getSum(1,3)
现在从getSum内部调用getSum,这叫做递归。现在getSum再次进入分支2并执行
return 2 + getSum(2 + 1, 3)
由于现在a等于b,getSum现在进入分支1并返回a(3)。如果我们总结一下上面的三行
getSum(1,3)
1 + getSum(2,3)
1 + ( 2 + getSum(3,3))
1 + ( 2 + (3))
整件事作为一条主线:
const getSum = (a, b) => a === b ? a : getSum(a + (a < b)?1:-1, b);
你的课程经历过递归吗?这是第一个(有效)示例。第二个代码输出
42
,而不是0
。这仍然不是总数,但我能理解为什么它会输出这个。不,它工作得很好。它甚至还返回了,实际上,总数是42。结束是包含的。@Obsidiage My bad,这意味着代码可以工作。。它将数字和它们之间的数字相加。我在电脑上的文本编辑器上输入了一个错误,但是在这里输入的时候。我纠正了错误,这就是为什么它有效。谢谢你的解释。你真的让我明白了递归是怎么回事。
const getSum = (a, b) => a === b ? a : getSum(a + (a < b)?1:-1, b);
const getSum = (a, b) => {
const res = 0;
if(b < a) [a,b] = [b,a];
while(a <= b) res += a++;
return res;
}
const getSum = (a, b) => 1/2 * Math.abs((a ** 2 + a - b ** 2 - b));