在JavaScript中使用循环查找不带循环的连续整数之和

在JavaScript中使用循环查找不带循环的连续整数之和,javascript,math,Javascript,Math,我正在寻找一种计算方法,如: function sumIntegerUpTo(number) { return 1+2+3+...+number; } 如果将number作为5传递,函数应返回1+2+3+4+5之和。我想知道是否可以不使用循环 function sumIntegerUpTo(number) { return (1 + number) * number / 2; } 我可以想出两种简单的方法来记住这个公式: 考虑将序列两端的数字相加:1和n,2和n-1,3和n-2

我正在寻找一种计算方法,如:

function sumIntegerUpTo(number) {
  return 1+2+3+...+number;
}
如果将
number
作为
5
传递,函数应返回
1+2+3+4+5
之和。我想知道是否可以不使用循环

function sumIntegerUpTo(number) {
    return (1 + number) * number / 2;
}
我可以想出两种简单的方法来记住这个公式:

  • 考虑将序列两端的数字相加:1和n,2和n-1,3和n-2,等等。这些小和最后都等于n+1。两端将在序列的中间(平均值)结束,因此总共应该有n/2个。所以求和=(n+1)*(n/2)

  • 平均数之前的数字(即(1+n)/2)和之后的数字一样多,加上一对与该平均数等距的数字总是导致平均数的两倍,并且有n/2对,因此sum=(n+1)/2*2*n/2=(n+1)/2*n

您可以相当容易地将上述推理扩展到不同的起始数字,即:sum(从a到b的数字,包括在内)=(a+b)/2*(b-a+1)。

当然是这样

1+2+3+...+n = n * (n+1) / 2

或者你可以使用递归的方法——这里有一个简单的公式,这是多余的!但是递归总是有一些很酷和神奇的东西

function addToN(n)
{
    if(n==0) return 0;
    else return n + addToN(n-1);
}

编辑以处理0

这是第四个。@FK82-不是,不是。你需要再读一遍这个问题。@Simon:你是对的,求和而不是求积。谢谢。:-)这忽略了卡尔·弗里德里希·高斯(Carl Friedrich Gauss)提出的公式。将100000传递给该公式,然后享受:)我认为,享受更多的是写作和思考魔法,而不是看着它发挥作用!:)这太可怕了。。。这样一个简单的数学函数不应该用递归计算。大量参数带来了巨大的性能打击@伊利普:我是在讽刺。。。我不打算测试它,但拥有100000级递归只会冻结你的浏览器,让你的用户生气:)哦,我完全同意!我提到它更多的是为了教育价值,而不是埃尔塞尼科所说的任何正确的东西!最好尽可能使用数学函数,因为它们代表了一种简化复杂计算的方法,否则需要循环和/或递归。如果您需要在计算中获得高性能,请尝试在上述数学函数中找到它!