如何确定JS递归函数的复杂性?

问题描述

我有代码1

var start = new Date().getTime();
function sumTo(n) {
  if (n == 1) return 1;
  return n + sumTo(n - 1);
}

console.log(sumTo(100));
var end = new Date().getTime();
var time = end - start;
console.log('Execution time: ' + time);

代码2

var start = new Date().getTime();
function sumTo(n) {
  return n * (n + 1) / 2;
}

console.log(sumTo(100));
var end = new Date().getTime();
var time = end - start;
console.log('Execution time: ' + time);

一个代码显示

5050
Execution time: 6

第二

5050
Execution time: 7

据我了解,code1是线性的,所以O(n)和code2是O(2 ^ n)。 为什么执行时间差这么小?

解决方法

算术计算不会增加复杂性,代码1为O(n)代码2为O(1)

您的测试不够,请尝试sumTo(10000000000000000000)

Read the wiki