以下伪代码的大O复杂度是多少?

时间:2013-11-27 09:27:18

标签: algorithm complexity-theory

以下伪代码的计算复杂度是什么?

integer recursive (integer n) {
   if (n == 1)
      return (1);
   else
      return (recursive (n-1) + recursive (n-1));
}

在现实世界中,调用将得到优化并产生线性复杂性,但是对于计算了大哦的RAM模型,复杂性会是多少?的 2 ^ N

2 个答案:

答案 0 :(得分:2)

这种算法在当前形式下的复杂性确实是O(2 n ),因为在每个呼叫级别上,呼叫次数会增加两倍。

第一个呼叫(递归(n))构成一个呼叫

下一级(递归(n-1))构成2次调用

在基本情况下(递归(1)),它构成2个 n-1 调用。

所以函数调用的总数是1 + 2 + ... + 2 n-1 = 2 n -1

因此复杂性为O(2 n )。

其他要点:

正如你所说的那样,通过记忆或动态编程,可以很容易地得到O(n)(或者对于使用快速取幂的这种特殊情况,可能是O(log n))。

答案 1 :(得分:2)

您的复杂性将为enter image description here

为什么会这样?只需mathematical induction证明:

  • N = 1:特殊情况,步数= 1。
  • N = 2,明显,enter image description here = 2,所以它是正确的
  • N=K正确,即N=K enter image description here
  • 假设N=K+1。函数recursive将递归调用N=K两次:recursive(K+1) = recursive(K) + recursive(K),因为它来自代码。那就是:enter image description here。因此,对于N=K+1,我们获得了enter image description here个步骤。

因此,我们已经证明N的复杂性在常见情况下为enter image description here(来自数学归纳的定义)。

相关问题