我需要找到这种编码算法的复杂性:
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
}
你能帮我确定时间复杂度吗?
答案 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中的冗余条目;现在注意其余元素的关系;这应该是显而易见的。
这会让你前进吗?