递归的Theta运行时

时间:2012-06-07 12:06:20

标签: c++ recursion runtime big-theta

如何计算此给定代码的Theta运行时:

void f(int n)
{
    for (int i=3; i<n; ++i)
        for (int j=0; j<i; ++j)
            f(n-1);
}

到目前为止,我得到了这个,但我不知道它是否正确或如何将它带入Theta表示法。

f(n) = n^2 * f(n-1)
f(n) = n^2 * (n-1)^2 * f(n-2)
f(n) = n^2 * (n-1)^2 * (n-2)^2 * f(n-3) 
...

2 个答案:

答案 0 :(得分:2)

由于每个嵌套的for循环都是O(N ^ 2)复杂度,并且每次在另一个函数内部调用函数时,复杂性都会成倍增加,最终会得到O((N!)^ 2),其中{ {1}}也是你递归的次数。这当然是因为N,并且用于创建阶乘的所有值都是平方的。

答案 1 :(得分:1)

如果我们用零替换3(这显然不会改变任何关于Θ的东西),我们可以非常容易地得出函数调用的确切数量:

  

Θ f 1 = 1
  Θ f n = n 2 ⋅Θ f n -1) n &gt; 0

所以,使用产品的交换性,

  

n n n
  Θ f n j 2 j ⋅Π j = n ! ⋅ n
   i = 1 i = 1 i = 1
=( n !) 2功能

正如杰森所说。