定义
斐波那契数列:
F[n]{0,n=01,n=1F[n−1]+F[n−2],elseF[n] \begin{cases} 0,n=0 \\ 1,n=1\\ F[n-1]+F[n-2],else \end{cases} F[n]⎩⎪⎨⎪⎧0,n=01,n=1F[n−1]+F[n−2],else
朴素计算法
根据递归式F[n]=F[n−1]+F[n−2]F[n]=F[n-1]+F[n-2]F[n]=F[n−1]+F[n−2]进行计算,时间复杂度T(n)=T(n−1)+T(n−2)=Θ(ϕn)T(n)=T(n-1)+T(n-2)=\Theta(\phi^n)T(n)=T(n−1)+T(n−2)=Θ(ϕn),其中ϕ=5+12\phi=\frac{\sqrt{5}+1}{2}ϕ=25+1是黄金分割比例。
递推计算法
从前往后进行递推,复杂度为Θ(n)\Theta(n)Θ(n)
朴素平方递归法
F[n]=ϕn/5F[n]=\phi^n/\sqrt{5}F[n]=ϕn/5 rounded to nestest
因为浮点数的表示精度问题,这种方法无法使用。仅仅在理论上可以。
平方递归法
定理:
[F[n+1]F[n]F[n]F[n−1]]=[1110]n\begin{bmatrix} F[n+1] & & F[n] \\ & & \\ F[n] & & F[n-1] \end{bmatrix}= \begin{bmatrix} 1 & & 1 \\ & & \\ 1 & & 0 \end{bmatrix}^n ⎣⎡F[n+1]F[n]F[n]F[n−1]⎦⎤=⎣⎡1110⎦⎤n
时间复杂度Θ(logn)\Theta(logn)Θ(logn)