Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解释此javascript代码如何对两个数字及其之间的数字求和_Javascript_Loops - Fatal编程技术网

解释此javascript代码如何对两个数字及其之间的数字求和

解释此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

我正在上javascript课程,目前正在做一些小项目

其中一个项目是: 给定两个整数,可以是正整数,也可以是负整数,求它们之间所有数字的和并返回。如果两个数字相等,则返回a或b

我找到的解决方案之一是:

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