javascript - 计算所有数字之和的 Javascript 函数(使用更快的运行时性能)
问题描述
我需要一种不同的方式来编写 addUpTo(n) 函数。比我下面的函数更好的性能或更快的计算
一个 JavaScript 函数,用于计算从 1 到(包括)某个数字 n 的所有数字的总和。
function addUpTo(n){
let total = 0;
for(let i =1; i<=n; i++){
total +=i;
}
return total;
}
需要一种更快的方法来编写这个函数,这比这要好得多
解决方案
的数字之和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`);
推荐阅读
- go - 如何获取集群内 go Kubernetes 客户端的当前命名空间
- javascript - 如何在数组中查找对象并将其显示在 React 组件中?
- php - 超时错误与 php.ini 中设置的不匹配
- c# - 通过 azure 通知中心 apns 发送推送通知
- matlab - Fortran控制台应用程序提示时如何在MATLAB中自动输入值?
- angular - p-calendar primeng 无法使用 ngmodel 和管道
- python - 由于循环中的长沿袭导致的 Stackoverflow 错误(在 DataFrame 上)
- angular - 使用 Angular Cli 和 Visual Studio Code 时,Angular 找不到组件/服务
- c# - 如何反转或重复RotateTransform?
- python - 在没有文件扩展名的情况下抓取和下载图像