我正在寻找一种方法来进行如下计算:
function sumIntegerUpTo(number) {
return 1+2+3+...+number;
}
Run Code Online (Sandbox Code Playgroud)
如果您传递number的5函数应该返回的总和1+2+3+4+5.我想知道是否有可能没有循环.
function sumIntegerUpTo(number) {
return (1 + number) * number / 2;
}
Run Code Online (Sandbox Code Playgroud)
我可以想到两个简单的方法让我记住这个公式:
考虑从序列的两端添加数字:1和n,2和n-1,3和n-2等.这些小和中的每一个最终都等于n + 1.两端将在序列的中间(平均)结束,因此总共应该有n/2个.所以sum =(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).