我接受了测验,但答案却有误,此后一直在困扰我,所以我想问一下你的想法
我需要优化以下功能
function sumOfEvenNumbers(n) {
var sum = 0;
for(let i = 2; i < n;i++){
if(i % 2 == 0) sum += i;
}
return sum;
}
console.log(sumOfEvenNumbers(5));
我想出了
function sumOfEvenNumbers(n) {
var sum = 0;
while(--n >= 2) sum += n % 2 == 0? n : 0
return sum;
}
console.log(sumOfEvenNumbers(5));
还有什么其他方式?
最佳答案
这是一个数学问题。该总和似乎是arithmitic sequence的总和,其共同差为2
。总和为:
sum = N * (last + first) / 2;
其中,
N
是序列中数字的编号,last
是这些数字的最后一个数字,而first
是第一个。转换为javascript:
function sumOfEvenNumbers(n) {
return Math.floor(n / 2) * (n - n % 2 + 2) / 2;
}
因为
2
和n
之间的偶数个数是Math.floor(n / 2)
,最后一个偶数是n - n % 2
(7
是7 - 7 % 2 === 6
,8
是8 - 8 % 2 === 8
)。第一个是2
。