分析一个递推的算法T(n)= T(n - 1)+ T(n - 2)+ c?

时间:2017-05-31 11:10:16

标签: algorithm recursion time-complexity big-o asymptotic-complexity

我知道这种类型的方程可以用很多方法解决,但是我想用递归树方法来解决方程。任何人都可以告诉我如何用递归树方法完成它?

1 个答案:

答案 0 :(得分:3)

递归树用于绘制递归算法的执行。您描述的这种重复与递归Fibonacci算法基本相同,其中这个等式:

F(n) = F(n-1) + F(n-2)
使用如下算法递归求解

int fib(int x) {
    if (x == 0)
        return 0;

    if (x == 1)
        return 1;

    return fib(x-1)+fib(x-2); //Does this recurrence look familiar?
} 

为输入5生成此树:

                    5
                   / \
                  /   \
                 /     \ 
                /       \     
               /         \
              /           \
             /             \
            4               3
           / \             / \
          /   \           /   1
         /     \         2
        3       2       / \
       / \     / \     1   0
      /   \   /   \  
     2     1 1     0
    / \
   /   \
  1     0

上面,我为Fibonacci序列绘制了一个非常简单的递归树。我只是插入第一个数字(5)并继续从它的后续递归调用生成一个简单的树。您可以看到树的高度为N且分支因子为2,因此我们的上限必须为O(2 ^ n)。您可以对此进行概括,以获得您希望使用此方法查找的特定问题和任何其他重复的答案。