在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
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级递归只会冻结你的浏览器,让你的用户生气:)哦,我完全同意!我提到它更多的是为了教育价值,而不是埃尔塞尼科所说的任何正确的东西!最好尽可能使用数学函数,因为它们代表了一种简化复杂计算的方法,否则需要循环和/或递归。如果您需要在计算中获得高性能,请尝试在上述数学函数中找到它!