如何使用JavaScript查找1到N之间的所有数字的总和

时间:2015-04-09 22:01:35

标签: javascript

我试图找到一种方法来使用JavaScript计算1到N之间所有数字的总和。以下是我到目前为止所尝试的代码,但它似乎无法正常工作。

function numberSum(N) {
  var total = 0;
    for(var i = 1; i <= N; i++){
      total += i;
    }
    return total;
}

我已经尝试在线使用jslint和其他验证器来检查我是否可能错过了某些内容,但这似乎并没有帮助我找到代码无效的原因。是否有一些我在上面遗漏的东西阻止了脚本执行添加?

7 个答案:

答案 0 :(得分:33)

你的代码很好。

保持简单:

var res = (n * (n+1)) / 2;

Wiki

答案 1 :(得分:6)

您的代码运行正常。你是怎么经营它的?

演示:

&#13;
&#13;
function numberSum(N) {
  var total = 0;
    for(var i = 1; i <= N; i++){
      total += i;
    }
    return total;
}

function run(){
  val = document.getElementById("val").value;
  document.getElementById("results").innerHTML=val+": "+numberSum(val)
  }
&#13;
<input id="val">
<input type="Submit" onclick="run();">
<p id="results"></p>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

我知道这已经解决了,但是我想发布一个我在阅读此线程后写的快速ES6 oneliner,并为像我这样没有扎实的数学背景的其他人更彻底地解释它。

const numSum = (n) => n * (n+1) / 2;

之所以有效,是因为它使用了mathematic formula that Carl Friedrich Gauss came up with。 (具有很好的图像)。

基本上,每当您将n个数字的和相加时,序列中就会有对。因此,高斯发现您不需要遍历每一对并添加它们,而只需要添加中间对并将该总和乘以对总数即可。这对于编程确实非常有效,因为它们不会遍历编程中会占用您资源的每个数字。

您可以通过除以n / 2来找到对的数量,它还为您提供中间的数字,然后您只需加1即可找到其对。

让我们假设您得到1-100的总和,通过应用高斯方法,您希望得到50(101)= 5050。 50是对的数量,在代码中,它用n *表示,而101是中间对(50 + 51)或代码(n+1)中的加法,最后我们除以2中间的数字。

答案 3 :(得分:0)

function SimpleAdding(num) { 
 
  place = 1;
  i = num;
  do {place = place += i; i--}
  while (i > 1);
  return place; 
         
}

您将占位符变量设置为1。您还可以将迭代次数设置为等于输入变量。

do循环然后用'i'添加占位符变量,然后当循环不再大于1时循环退出,这是正确的,因为你的占位符等于1。

答案 4 :(得分:0)

可以使用递归来计算

var numberSum = (n, a = n) => n ? numberSum(n = n - 1 , a = a + n) : a

答案 5 :(得分:-1)

function numSum(n){
    var sum = 0;
      for(i = 0; i <= n; i++){
        sum += i; 
         }
    console.log(sum)
         }
numSum(15);

答案 6 :(得分:-1)

递归的更一般的答案。

const sumRange = (min, max) => min !== max 
    ? sumRange(min, max - 1) + max 
    : 0

虽然对于min:0 max:n的情况,这可能不是最佳答案,但它可能是最容易阅读和理解的。