斐波那契数列
Posted xuguoli_beyondboy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了斐波那契数列相关的知识,希望对你有一定的参考价值。
编程之美有一道题是关于斐波那契数列,作者提供了三种解决思路:
第一种解法:
根据递推关系定义:
其转换成递归树,该结构如图:
从上面递归树结构可以看出其有重叠情况,故编程之美提出可以用一个存储变量来存储其计算过的值来排除解决重复的计算的问题,其时间复杂度为O(N),空间复杂度也为 O(N)。
第二种解法:
根据线性递推数列定义:具有形如
xn+2=axn+1+bxn
的递推公式的数列叫做线性递推数列,其特征方程为:
y2=ay+b
,再根据韦达定理可以得出其关系公式:
xn=c1rn+c2sn
其中r,s为其特征方程
y2=ay+b
的两个根,c1,c2可以根据
x1
和
x2
来求出.
斐波那契数列满足这条件,故可以求出其通项公式:
f(n)=5√5×(1+5√2)n−5√5×(1−5√2)n
,尽管可以在O(1)的时间内得到f(n)但是由于出现了无理数,其精确度无法保障,故不是最好的选择。
第三种解法:
斐波那契数列是二阶递推数列,所以存在一个2*2的矩阵A,使得:
(fnfn−1)=(fn−1fn−2)∗A
求解可得:
A=(1110)
因此可以推导出:
(fnfn−1)=(fn−1fn−2)∗A=(fn−2fn−3)∗A2=....=(f1斐波那契数列递归解法与循环解法