【问题标题】:Recurence relation of recursive call inside another递归调用的递归关系
【发布时间】:2019-10-18 04:21:07
【问题描述】:

我正在尝试分析这段代码的成本:

static int funct1(int x) {
     if (x<=1) return x;
     return funct1(funct1(x/2)) + 1;
}

我如何解决重复关系T(n)=T(T(n/2))+1

【问题讨论】:

    标签: algorithm recursion time-complexity complexity-theory


    【解决方案1】:

    您的分析不正确。 T(n) = T(f(n/2)) + T(n/2) + 1(你错过了T(n/2),但程序应该先计算T(n/2),然后运行T(f(n/2)))。而且不是T(T(n/2))

    现在尝试将f(n) 视为函数funct1 的值。 假设n = 2^kf(2^k) = f(f(2^{k-1})) + 1 = f(f(2^{k-2}) + 1) + 1 = ... = f(f(f(...f(1) + 1..)+1)+1) + 1f(1) = 1f(2) = 2f(3) = 2f(4) = 3f(8) = f(f(4)) + 1 = f(3) + 1 = 3f(16) = f(f(8)) + 1 = f(3) + 1 = 3f(32) = f(f(16)) + 1 = f(3) + 1 = 3。如您所见,它对所有值 2^kf(2^k) = 3 重复。

    因此,T(n) = T(3) + T(n/2) + 1 = O(log n)

    【讨论】:

      猜你喜欢
      • 2020-11-09
      • 2019-10-18
      • 1970-01-01
      • 2020-11-08
      • 2014-12-26
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      • 2011-09-16
      相关资源
      最近更新 更多