下午正好有人问到这个问题,所以就写一个。
斐波那契数列的实现我们可以很快想到——递推,即当前项等于前两项的和。但是这样还是略微令人不愉快,它是 O ( n ) O(n) O(n)的(虽然uint64也只能算到93项…性能差距不明显),我们有没有更快的方法呢?此时就该求助于数学了。
简单的递归数列可以一般性的表示为
x n + k = λ 1 x n + k − 1 + λ 2 x n + k − 2 + ⋅ ⋅ ⋅ + λ n x n + q x_{n+k}=\lambda_1x_{n+k-1}+\lambda_2x_{n+k-2}+\cdot\cdot\cdot+\lambda_nx_n+q xn+k=λ1xn+k−1+λ2xn+k−2+⋅⋅⋅+λnxn+q 在初始值确定的时候,它被叫做 k k k阶常系数递归数列。而这样的一个k次方程就被称作上式的特征方程:
x k = λ 1 x k − 1 + λ 2 x k − 2 + ⋅ ⋅ ⋅ + λ k − 1 x + λ k x^{k}=\lambda_1x^{k-1}+\lambda_2x^{k-2}+\cdot\cdot\cdot+\lambda_{k-1}x+\lambda_k xk=λ1xk−1+λ2xk−2+⋅⋅⋅+λk−1x+λk 对应的斐波那契数列表示为 a n + 2 = a n + 1 + a n , n > 2 a_{n+2}=a_{n+1}+a_{n},n>2 an+2=an+1+an,n>2,初始项为 a 1 = a 2 = 1 a_1=a_2=1 a1=a2=1,是确定的。它的特征方程就是:
x 2 = x + 1 x^2=x+1
C语言写一个斐波那契数列
最新推荐文章于 2025-03-12 22:03:14 发布