首页 > 解决方案 > 计算所有数字之和的 Javascript 函数(使用更快的运行时性能)

问题描述

我需要一种不同的方式来编写 addUpTo(n) 函数。比我下面的函数更好的性能或更快的计算

一个 JavaScript 函数,用于计算从 1 到(包括)某个数字 n 的所有数字的总和。

function addUpTo(n){
    let total = 0;
    for(let i =1; i<=n; i++){
        total +=i;
    }
    return total;
}

需要一种更快的方法来编写这个函数,这比这要好得多

标签: javascript

解决方案


的数字之和1+2+...+N可以表示为公式sum = N*(N+1)/2

因此,您可以编写:

function addUpTo(n) {
    return n * (n+1) / 2;
}

这将优于问题中的方法,因为它从计算中删除了循环。


请参阅片段以进行简单的性能分析

// loop method
function addUpTo(n) {
  let total = 0;
  for(let i =1; i<=n; i++){
    total += i;
  }
  return total;
}

// formula method
function calcSum(n) { return n * (n+1) / 2; }

let t0 = performance.now();
let s1 = addUpTo(1000000);
let t1 = performance.now();

let t2 = performance.now();
let s2 = calcSum(1000000);
let t3 = performance.now();

console.log(`addUpTo calculated ${s1} in: ${t1-t0} ms`);
console.log(`calcSum calculated ${s2} in: ${t3-t2} ms`);


推荐阅读