【问题标题】: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);
   }

【问题讨论】:

  • 如果N为10,则递归调用3次。我说的对吗?
  • 看起来会是 O(log(n))

标签: 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.
    

    括号表示底函数。

    【讨论】:

      猜你喜欢
      • 2015-11-29
      • 2022-11-22
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 2018-08-18
      相关资源
      最近更新 更多