我接受了测验,但答案却有误,此后一直在困扰我,所以我想问一下你的想法

我需要优化以下功能

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;
}


因为2n之间的偶数个数是Math.floor(n / 2),最后一个偶数是n - n % 277 - 7 % 2 === 688 - 8 % 2 === 8)。第一个是2

09-11 19:11