此递归求解为Θ((log n) 2 )。这里有两种方法可以看到这一点。
一些替代品
如果您知道 n 是 2 的完美幂(即 n = 2 k),则可以将递归重写为
T(2 k ) = T(2 k-1 ) + k
让我们定义一个新的递归 S(k) = T(2 k )。然后我们得到
S(k) = S(k - 1) + k
如果我们扩展这个重复,我们得到
S(k) = S(k - 1) + k
= S(k - 2) + (k - 1) + k
= S(k - 3) + (k - 2) + (k - 1) + k
= S(k - 4) + (k - 3) + (k - 2) + (k - 1) + k
...
= S(0) + 1 + 2 + 3 + ... + k
= S(0) + Θ(k 2 )
假设 S(0) = 1,则此递归求解为 Θ(k 2 )。
由于 S(k) = T(2 k ) = T(n),我们得到 T(n) = Θ(k 2 ) = Θ(log 2 n)。
迭代递归
这里的另一个选择是扩展一些递归项,看看是否出现了任何好的模式。这是我们得到的:
T(n) = T(n / 2) + lg n
= T(n / 4) + lg (n / 2) + lg n
= T(n / 8) + lg (n / 4) + lg (n / 2) + lg n
...
最终,在 lg n 层之后,这种递归式触底,我们只剩下这个表达式:
lg n + lg (n / 2) + lg (n / 4) + ... + lg (n / 2 lg n)
使用对数的性质,我们可以将其重写为
lg n + (lg n - 1) + (lg n - 2) + (lg n - 3) + ... + (lg n - lg n)
或者,反过来写,这是总和
0 + 1 + 2 + 3 + ... + lg n
该总和是高斯对 lg n 的总和,其计算结果为 (lg n)(lg n + 1) / 2 = Θ((log n)2)。
希望这可以帮助!