我有一个递归函数。我正在寻找什么时间复杂度? 这是功能
public static int f7(int N){
if (N==1) return 0;
return 1 + f7(N/2);
}
答案 0 :(得分:3)
答案 1 :(得分:1)
假设当N=1
时,呼叫使用a
个时间单位;当N
是2的幂时,则使用b
个时间单位,计数递归调用。
然后
T(1) = a
T(2^n) = T(2^(n-1)) + b.
这可以看作是普通的线性重复
S(0) = a
S(n) = S(n-1) + b = S(n-2) + 2b = … = S(0) + nb = a + nb,
或
T(N) = a + Lg(N) b
其中Lg
表示以2为底的对数。
如果N
不是2的幂,则时间与2的最接近次幂相同。
所有N
的确切公式是
T(N) = a + [Lg(N)] b.
括号表示发言权功能。