📜  递归斐波那契程序的时间复杂度

📅  最后修改于: 2021-04-29 16:04:17             🧑  作者: Mango

斐波那契数是以下整数序列中的数字:0、1、1、2、3、5、8、13…
数学斐波纳契数可以由以下递归公式编写。

For seed values F(0) = 0 and F(1) = 1
F(n) = F(n-1) + F(n-2)

在继续本文之前,请确保您熟悉斐波那契数字程序中讨论的递归方法。

递归斐波那契程序分析:
我们知道斐波那契的递推方程为T(n) = T(n-1) + T(n-2) + O(1)
这意味着,计算fib(n)所花费的时间等于计算fib(n-1)和fib(n-2)所花费的时间之和。这还包括执行先前添加操作的恒定时间。

在求解上述递归方程时,我们得到斐波那契的上限为O(2^n)但这不是严格的上限。斐波那契可以数学上表示为线性递归函数的事实可用于找到严格的上限。
现在,斐波那契定义为

F(n) = F(n-1) + F(n-2)

该函数的特征方程为
x^2 = x + 1
x^2x1 = 0

通过二次公式解决这个问题,我们可以得到根
x =( 1 + \sqrt{5} )/ 2x =( 1\sqrt{5} )/ 2

现在我们知道线性递归函数的解为
F(n) = ($\alpha_1)^n + ($\alpha_2)^n

在哪里$\alpha_1$\alpha_2是特征方程的根。
所以对于我们的斐波那契函数F(n) = F(n-1) + F(n-2)解决方案将是

F(n) = ((1+$\sqrt{5})/2)^n + ((1-\sqrt{5})/2)^n
清楚地T(n)F(n)在渐近上都相同,因为两个函数都表示相同的事物。
因此可以说
T(n) = O(((1+$\sqrt{5})/2)^n+((1-\sqrt{5})/2)^n)
或者我们可以在下面写(使用Big O表示法的属性,我们可以删除低阶术语)
T(n) = O(((1+$\sqrt{5})/2)^n
T(n) = O(1.6180)^n
这是斐波那契的严格上限。\

有趣的事实:
1.6180也称为黄金分割率。您可以在此处阅读有关黄金分割率的更多信息:数学中的黄金分割率