递归代码的时间复杂度

时间:2017-11-02 20:42:12

标签: recursion time big-o

我需要找到这种编码算法的复杂性:

int f(int n){
    if ( n==0 )
       return 0;
    else if( n%2 != 0 )
       return f(n-1 ) +1 
    else
       return f(n/2) + f(n-1 ) + 1
    }

你能帮我确定时间复杂度吗?

1 个答案:

答案 0 :(得分:0)

int count

int f(int n){
    if ( n==0 )
       result = 0;
    else if( n%2 != 0 )
       result = f(n-1 ) +1 
    else
       result = f(n/2) + f(n-1 ) + 1

    count += 1
    return result
    }

// Main
for (i=0; i<=30; i+=1) {
    count = 0
    print i, f(i), count
}

现在,请注意值的进展。 (1)注意f(2n)f(2n+1)之间的关系(2)消除#1中的冗余条目;现在注意其余元素的关系;这应该是显而易见的。

这会让你前进吗?

相关问题