如何计算这段代码的时间复杂度?

时间:2019-05-09 08:24:54

标签: javascript performance time time-complexity

我有这个问题来计算时间复杂度吗?

const iterate = a => {
  if (a === 5) {
    return;
  }
  for (var i = 0; i <= a; i++) {
    console.log(i);
    iterate(i + 1);
  }
};
iterate(0);

2 个答案:

答案 0 :(得分:1)

您会得到一个无限循环,因为您将目标值增加了一个,但您以{0开头的for语句开始了,并且该值直到到达堆栈末尾时才改变。

for (var i = 0; i <= a; i++) {
    console.log(i);
    iterate(i + 1);
}

这意味着您使用第一个零值再次调用该函数,然后该函数再次调用自身,依此类推。

结果是此未捕获的错误:

RangeError: Maximum call stack size exceeded

答案 1 :(得分:0)

算法复杂度仅针对必须通过(最常被接受的定义)终止的算法进行定义。

上面的代码重复无数次。因此无法确定代码的时间复杂度。

有人可能会说 O(n),其中 n =>无穷大

上面的代码没有停止,因为没有条件将'i'的值增加到无穷大。