如何计算递归函数的复杂性?

时间:2016-05-27 09:13:37

标签: javascript recursion big-o complexity-theory

计算以下递归函数的时间和空间复杂度(Big O表示法)的最直观方法是什么?

function count(str) {
  if (str.length <= 1) {
    return 1;
  }

  var firstTwoDigits = parseInt(str.slice(0, 2), 10);

  if (firstTwoDigits <= 26) {
    return count(str.slice(1)) +
           count(str.slice(2));
  }

  return count(str.slice(1));
}

1 个答案:

答案 0 :(得分:4)

为我的热门答案道歉,您的代码的复杂性似乎是

在最坏的情况下,

O(2 ^ N) O(2 ^ N-1)是准确的。

所以,如果

N = str.length ;//number of iteration

在最糟糕的情况下,您的str包含1或2的所有N个数字。

然后,如果 N是20 开始,那么它将产生另外两个递归调用 N = 18 N = 19

然后, N = 19 将产生两个以上的呼叫(因此,一个直到N的值为0)

因此,每次迭代时调用次数将呈指数增长),因此达到值(2 ^ N - 1)。