递归函数的时间复杂度是多少?

时间:2019-11-17 17:35:58

标签: algorithm recursion data-structures time-complexity

我有一个递归函数。我正在寻找什么时间复杂度? 这是功能

 public static int f7(int N){
         if (N==1) return 0;
         return 1 + f7(N/2);
   }

2 个答案:

答案 0 :(得分:3)

首先,我们想出此函数的重复出现:

T(1) = 1
T(n) = T(n/2) + 1

这是我们可以插入master theorem的循环,这将给我们Θ(log n)作为答案。

答案 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.

括号表示发言权功能。