【问题标题】:What is the time complexity of recursive function?递归函数的时间复杂度是多少?
【发布时间】:2020-03-13 03:44:19
【问题描述】:
我有一个递归函数。我正在寻找时间复杂度是多少?
这是函数
public static int f7(int N){
if (N==1) return 0;
return 1 + f7(N/2);
}
【问题讨论】:
标签:
algorithm
recursion
data-structures
time-complexity
【解决方案1】:
首先,我们为这个函数想出一个递归:
T(1) = 1
T(n) = T(n/2) + 1
这是一个我们可以插入master theorem 的循环,它会给我们 Θ(log n) 作为答案。
【解决方案2】:
假设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.
括号表示底函数。