循环内部递归函数的时间复杂度

时间:2017-08-19 05:47:21

标签: time-complexity big-o

如果我们有一个功能: -

cross-entropy

据我所知,时间复杂度可以计算为: -

int x=0;

int fun(int n)
{
    if(n==0) 
        return 1;

    for(int i=0; i<n;i++)
        x += fun(i);
}

我说错了吗?

2 个答案:

答案 0 :(得分:1)

如果您正在测量函数调用的数量(或添加 - 结果相同),则正确的重复关系为:

T(0) = 0
T(n) = T(0) + T(1) + T(2) + ... + T(n-1) + n

您可以计算前几个值:

 T(0) = 0
 T(1) = 1
 T(2) = 3
 T(3) = 7
 T(4) = 15

你可以从中猜出T(n)= 2 ^ n - 1,并且通过归纳证明很容易检查。

从某种意义上说,你知道T(n)= O(n!),因为n! &GT; 2 ^ n表示n> 3,但T(n)= O(2 ^ n)是一个更严格的界限。

答案 1 :(得分:0)

1. T(n) = T(n-1) + T(n-2) + T(n-3) + .... + T(0)

// Replace n with n-1
2. T(n-1) = T(n-2) + T(n-3) + .... + T(0)

在第一个方程式中将T(n-2) + T(n-3) + .... + T(0)替换为T(n-1)

T(n) = T(n-1) + T(n-1)
     = 2 * T(n-1)
     = 2 * 2 * T(n-2) // Using T(n-1) =  2 * T(n-2)
     = 2^n * T(n-n)
     = 2^n * T(0) // Consider T(0) = 1
     = 2^n