我正在寻找一种方法来进行计算:
function sumIntegerUpTo(number) {
return 1+2+3+...+number;
}
如果您将number
作为5
函数传递,则应返回1+2+3+4+5
的总和。我想知道是否可以不做循环。
答案 0 :(得分:8)
当然是!
1+2+3+...+n = n * (n+1) / 2
答案 1 :(得分:7)
function sumIntegerUpTo(number) {
return (1 + number) * number / 2;
}
我可以想到两种简单的方法来记住这个公式:
考虑从序列的两端添加数字: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。
您可以相当轻松地将上述推理扩展到不同的起始编号,为您提供:总和(从a到b的数字,包括在内)=(a + b)/ 2 *(b-a + 1)。
答案 2 :(得分:2)
或者您可以使用递归方法 - 这是多余的,因为有一个简单的公式!但是递归总会有一些很酷且神奇的东西!
function addToN(n)
{
if(n==0) return 0;
else return n + addToN(n-1);
}
编辑处理0!