我试图找到一种方法来使用JavaScript计算1到N之间所有数字的总和。以下是我到目前为止所尝试的代码,但它似乎无法正常工作。
function numberSum(N) {
var total = 0;
for(var i = 1; i <= N; i++){
total += i;
}
return total;
}
我已经尝试在线使用jslint和其他验证器来检查我是否可能错过了某些内容,但这似乎并没有帮助我找到代码无效的原因。是否有一些我在上面遗漏的东西阻止了脚本执行添加?
答案 0 :(得分:33)
答案 1 :(得分:6)
您的代码运行正常。你是怎么经营它的?
演示:
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;
答案 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的情况,这可能不是最佳答案,但它可能是最容易阅读和理解的。