解决递归关系的运行时间

时间:2015-03-04 20:07:53

标签: algorithm recursion

我的算法在下面给出,我知道这个算法有一个指数运行时间,但我不知道如何以数学方式显示。有没有人对此有任何想法?

if(n = 1或n = 2)然后返回n

否则 return 2 * RecursiveMNum(n - 1)* RecursiveMNum(n - 2)

2 个答案:

答案 0 :(得分:2)

正如您所看到的,复杂性取决于调用2 * RecursiveMNum(n - 1) * RecursiveMNum(n - 2),因为另一个将在O(1)上计算。

因此,您可以使用Substitution解决此问题。

  

T(n)= T(n-1)+ T(n-2)< 2T(N-1)

现在

  

2T(N-1)= 2(2T(N-2))= 2(2(2T(N-3)))= ... = 2 ^ KT(NK)= ... = 2 ^ NT(0)= O(2 ^ n)的

     

T(0)=Θ(1)(基本情况)

所以你可以说它一般有O(2^n)的复杂性。

答案 1 :(得分:0)

正如您所说的 n = 1 ,对函数进行一次调用以获得答案,对于 n = 2 也是如此。拨打 n = 3 的通话次数是 n = 1 的通话次数加上 n = 2 的通话次数。因此,呼叫次数的顺序是 1,1,2,3 ..... 。这确实是 Fibonacci 系列。如果你知道黄金数字的概念,那么这个系列中两个连续数字的比率约为 1.6 Golden Number),接近黄金数字。
现在,指数序列中的连续比例如 a ^ n a 。在我们的例子中,我们可以说 a 大致约为 1.6 。因此,它确实具有指数增长,即。你可以说它是 O(a ^ n),其中 a 约为 1.6 。您还可以在这里查看第n个斐波那契数的封闭形式:Nth Fibonacci证明该论证具有指数形式。