我试图找到这个块的时间复杂度,是O(n!)还是O(2 ^ n),怎么样?
void fun(int n)
{
int i;
count++;
if(n>0)
{
for(i=1;i<n;i++)
fun(n-i);
}
}
我尝试了n的diff值和count
给出的值acc。到2^n
??
感谢
答案 0 :(得分:0)
每次调用T(n),都会调用T(n-1), T(n-2), ..., T(1)
。
这为我们提供了复杂功能:
T(1) = 1
T(n) = T(n-1) + T(n-2) + .... + T(1)
如果我们对任何T(k) <= c*2^k
和某些常数k < n
使用归纳和假设c
(并且在正确检查T(1) = 1 <= 2^1
之后,我们会得到:
T(n) = T(n-1) + ... + T(1) + 1 =
= c*2^(n-1) + c*2^(n-2) + ... + c*2^1 + 2^0 <=
<= c*(2^n - 1) <= c*2^n
最后一个等式来自几何系列的总和。
因此,我们可以得出结论T(n)
位于Theta(2^n)