繁体   English   中英

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

[英]What is the time complexity of recursive function?

我有一个递归 function。 我正在寻找时间复杂度是多少? 这是 function

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

首先,我们想出这个 function 的复现:

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

这是一个我们可以插入主定理的递归,它会给我们 Θ(log n) 作为答案。

假设当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.

括号表示地板 function。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM