递归树

递归树指使用树的形式展现递归算法的实现,如下图为求解斐波那契数列的递归树:

使用递归树可以更好地分析递归算法的时间复杂度

分析上图中求斐波那契数列的时间复杂度: f(n) 分解为f(n-1)f(n-2)。从根节点走到叶子节点,每条路径长短不一,最长路径是 n,最段路径是 n / 2

每次分解之后的合并操作只需要一次加法运算,把一次加法运算的时间消耗记为1。那么,第一层的总时间消耗为1(2的0次方),第二层为2的1次方,第三层3层为2的2次方……第 k 层的时间消耗为 2 的k-1次方。整个算法的总时间消耗就是每一层时间消耗之和。

如果将路径长度全部设为n,总和为2的n次方减1; 如果将路径长度全部设为 n / 2,总和为2的(n/2)次方减1。

因此,该算法的时间复杂度就介于O(2^n) 和 O(2^(n/2))之间。