计算机考研之数据结构:斐波那契数列专题(1)

embedded/2025/2/26 17:30:28/

不论是在算法还是在编程语言的教材中,都可能会以斐波那契数列为例,或说明其算法上的特点——主要是递归,或说明如何运用某种编程语言编写相应函数。

本文是一篇关于“斐波那契数列”的专题文章,目的是让学习《数据结构》这门课程的同学对此问题有完整的理解。

1. 斐波那契数列

斐波那契数列于公元1150年被印度数学家发现,而后意大利人斐波那契(Leonardo Fibonacci, 1175-1250)在描述兔子生长的数目时用上了这数列:

  • 第一个月初有一对刚诞生的兔子;
  • 第二个月之后(第三个月初)它们可以生育;
  • 每月每对可生育的兔子会诞生下一对新兔子;
  • 兔子永不死。

假设在 n n n 月有兔子总共 a a a 对, n + 1 n + 1 n+1 月总共有 b b b 对。在 n + 2 n + 2 n+2 月必定总共有 a + b a + b a+b 对:因为在 n + 2 n + 2 n+2 月的时候,前一月( n + 1 n + 1 n+1 月)的 b b b 对兔子可以存留至第 n + 2 n + 2 n+2 月(在当月属于新诞生的兔子尚不能生育)。而新生育出的兔子对数等于所有在 n n n 月就已存在的 a a a 对。

斐波纳契数是帕斯卡三角形的每一条红色对角线上数字的和。

在这里插入图片描述
用递归方式定义斐波那契数列:
f i b ( n ) = { 1 ( n = 0 或 n = 1 ) f i b ( n − 1 ) + f i b ( n − 2 ) ( n > 1 ) fib(n)=\begin{cases} 1&\quad (n=0或n=1) \\fib(n-1)+fib(n-2)&\quad(n\gt1) \end{cases} fib(n)={1fib(n1)+fib(n2)(n=0n=1)(n>1)

1.1 时间复杂度

根据以上表达式,写出相应的算法描述

long fib(long n){if(n == 1 || n == 2) return 1;else return fib(n-1) + fib(n-2);
}

下面分析上述算法描述的时间复杂度。

假设计算 fib(n) 的时间是 T ( n ) T(n) T(n) ,先花费 T ( n − 1 ) T(n-1) T(n1) 时间计算 fib(n-1) ;再花费 T ( n − 2 ) T(n-2) T(n2) 时间计算 fib(n-2) ;最后用 1 个时间单元将二者相加。由此写出 T ( n ) T(n) T(n) 的递推式:
T ( n ) = { 1 ( n ≤ 1 ) T ( n − 1 ) + T ( n − 2 ) + 1 ( others ) T(n)=\begin{cases}1&(n\le1)\\T(n-1)+T(n-2)+1&(\text{others})\end{cases} T(n)={1T(n1)+T(n2)+1(n1)(others)
S ( n ) = T ( n ) + 1 2 S(n)=\frac{T(n)+1}{2} S(n)=2T(n)+1 ,则上式可以写成:
S ( n ) = { 1 ( n ≤ 1 ) S ( n − 1 ) + S ( n − 2 ) ( others ) S(n)=\begin{cases}1&(n\le1)\\S(n-1)+S(n-2)&(\text{others})\end{cases} S(n)={1S(n1)+S(n2)(n1)(others)
将此式与斐波那契数列的函数式对比:
f i b ( n ) = { 1 ( n = 0 或 n = 1 ) f i b ( n − 1 ) + f i b ( n − 2 ) ( n > 1 ) fib(n)=\begin{cases} 1&\quad (n=0或n=1) \\fib(n-1)+fib(n-2)&\quad(n\gt1) \end{cases} fib(n)={1fib(n1)+fib(n2)(n=0n=1)(n>1)
S ( n ) S(n) S(n) f i b ( n ) fib(n) fib(n) 在形式上基本一样,只是起始项不同,有归纳可得:
S ( 0 ) = 1 = f i b ( 1 ) S ( 1 ) = 1 = f i b ( 2 ) ⋮ S ( n ) = f i b ( n − 1 ) \begin{split} S(0)&=1=fib(1) \\S(1)&=1=fib(2) \\&\vdots \\S(n)&=fib(n-1) \end{split} S(0)S(1)S(n)=1=fib(1)=1=fib(2)=fib(n1)
根据 f i b ( n ) fib(n) fib(n) 可以解得(求解过程参见本节拓展内容):
f i b ( n ) = 1 5 [ ( 1 + 5 2 ) n − ( 1 − 5 2 ) n ] , ( n = 0 , 1 , 2 , ⋯ ) fib(n)=\frac{1}{\sqrt{5}}\left[\left(\frac{1+\sqrt{5}}{2}\right)^{n}-\left(\frac{1-\sqrt{5}}{2}\right)^{n}\right] ,(n=0,1,2,\cdots) fib(n)=5 1[(21+5 )n(215 )n],(n=0,1,2,)
φ = 1 + 5 2 \varphi=\frac{1+\sqrt{5}}{2} φ=21+5 (黄金比例),则 f i b ( n ) = 1 5 [ φ n − ( 1 − φ ) n ] fib(n)=\frac{1}{\sqrt{5}}[\varphi^n-(1-\varphi)^n] fib(n)=5 1[φn(1φ)n]

所以:
S ( n ) = f i b ( n + 1 ) = 1 5 [ φ ( n + 1 ) − ( 1 − φ ) ( n + 1 ) ] ∴ T ( n ) = 2 S ( n ) − 1 = 2 ⋅ f i b ( n + 1 ) − 1 = O ( φ n + 1 ) \begin{split} &S(n)=fib(n+1)=\frac{1}{\sqrt{5}}[\varphi^{(n+1)}-(1-\varphi)^{(n+1)}] \\&\therefore~T(n)=2S(n)-1=2\cdot fib(n+1)-1=O(\varphi^{n+1}) \end{split} S(n)=fib(n+1)=5 1[φ(n+1)(1φ)(n+1)] T(n)=2S(n)1=2fib(n+1)1=O(φn+1)
由此可知,以递归方式实现的斐波那契数列的时间复杂度为指数级,不是一个有价值的算法。其原因在于违反了设计递归算法的基本原则中的合成效益法则。根据 f i b ( n ) fib(n) fib(n) 的递归函数,追踪调用过程,当第一次调用 f i b ( n − 1 ) fib(n-1) fib(n1) 时, f i b ( n − 2 ) fib(n-2) fib(n2) 实际上已经计算了,在后面还要再计算 f i b ( n − 2 ) fib(n-2) fib(n2) 。即同一个实例,在递归过程中,重复计算,从而导致运行时间暴增。

1.2 计算斐波那契数列的通项

F k F_k Fk 为斐波那契数列中的第 k k k 项,则:

F k + 2 = F k + 1 + F k , ( k = 0 , 1 , 2 , ⋯ ) (1) F_{k+2} = F_{k+1} + F_k,(k=0,1,2,\cdots) \tag{1} Fk+2=Fk+1+Fk,(k=0,1,2,)(1)
根据斐波那契数列的特点,初始条件是: F 0 = 0 , F 1 = 1 F_0=0, F_1=1 F0=0,F1=1

将(1)式写成:

{ F k + 2 = F k + 1 + F k F k + 1 = F k + 1 \begin{cases}F_{k+2}=F_{k+1}+F_k\\F_{k+1}=F_{k+1}\end{cases} {Fk+2=Fk+1+FkFk+1=Fk+1
以矩阵方式表示为:

[ F k + 2 F k + 1 ] = [ 1 1 1 0 ] [ F k + 1 F k ] (2) \begin{bmatrix}F_{k+2}\\F_{k+1}\end{bmatrix}=\begin{bmatrix}1&1\\1&0\end{bmatrix}\begin{bmatrix}F_{k+1}\\F_{k}\end{bmatrix} \tag{2} [Fk+2Fk+1]=[1110][Fk+1Fk](2)

1.2.1 第一种方法

u k = [ F k + 1 F k ] \pmb{u}_k=\begin{bmatrix}F_{k+1}\\F_{k}\end{bmatrix} uk=[Fk+1Fk] ,由(2)式得到:

u k + 1 = A u k , ( k = 0 , 1 , ⋯ ) (3) \pmb{u}_{k+1}=\pmb{Au}_k,(k=0,1,\cdots) \tag{3} uk+1=Auk,(k=0,1,)(3)
其中, A = [ 1 1 1 0 ] \pmb{A}=\begin{bmatrix}1&1\\1&0\end{bmatrix} A=[1110] ,初始条件 u 0 = [ F 1 F 0 ] = [ 1 0 ] \pmb{u}_0=\begin{bmatrix}F_1\\F_0\end{bmatrix}=\begin{bmatrix}1\\0\end{bmatrix} u0=[F1F0]=[10]

(3)式查分方程(参见《机器学习数学基础》第 3 章 3.2.2,齐伟,电子工业出版社)。

又因为:
u k = A u k − 1 = A ( A u k − 2 ) = A 2 u k − 2 = ⋯ = A k u 0 (4) \pmb{u}_k=\pmb{Au}_{k-1}=\pmb{A}(\pmb{Au}_{k-2})=\pmb{A}^2\pmb{u}_{k-2}=\cdots=\pmb{A}^k\pmb{u}_0\tag{4} uk=Auk1=A(Auk2)=A2uk2==Aku0(4)
所以,只要计算出 A k \pmb{A}^k Ak ,然后将它与初始条件 u 0 \pmb{u}_0 u0 相乘,即得到 u k \pmb{u}_k uk

对于矩阵 A = [ 1 1 1 0 ] \pmb{A}=\begin{bmatrix}1&1\\1&0\end{bmatrix} A=[1110] ,其特征多项式:

∣ A − λ I ∣ = ∣ 1 − λ 1 1 − λ ∣ = λ 2 − λ − 1 |\pmb{A}-\lambda\pmb{I}|=\begin{vmatrix}1-\lambda & 1\\1&-\lambda\end{vmatrix}=\lambda^2-\lambda-1 AλI= 1λ11λ =λ2λ1
根据特征方程: ∣ A − λ I ∣ = 0 |\pmb{A}-\lambda\pmb{I}|=0 AλI=0 ,得:

λ 2 − λ − 1 = 0 (5) \lambda^2-\lambda-1=0\tag{5} λ2λ1=0(5)
解得:

{ λ 1 = 1 + 5 2 λ 2 = 1 − 5 2 (6) \begin{cases}\lambda_1=\frac{1+\sqrt{5}}{2}\\\lambda_2=\frac{1-\sqrt{5}}{2}\end{cases}\tag{6} {λ1=21+5 λ2=215 (6)
显然, λ 1 + λ 2 = 1 , λ 1 λ 2 = − 1 \lambda_1+\lambda_2=1,\lambda_1\lambda_2=-1 λ1+λ2=1,λ1λ2=1

再根据 A x = λ x \pmb{Ax}=\lambda\pmb{x} Ax=λx 计算(6)中每个特征值所对应的特征向量。

λ = λ 1 \lambda=\lambda_1 λ=λ1 时,设特征向量为 [ x 1 y 1 ] \begin{bmatrix}x_1\\y_1\end{bmatrix} [x1y1] ,则:

[ 1 1 1 0 ] [ x 1 y 1 ] = λ 1 [ x 1 y 1 ] \begin{bmatrix}1&1\\1&0\end{bmatrix}\begin{bmatrix}x_1\\y_1\end{bmatrix}=\lambda_1\begin{bmatrix}x_1\\y_1\end{bmatrix} [1110][x1y1]=λ1[x1y1]
可得: [ x 1 y 1 ] = [ λ 1 1 ] \begin{bmatrix}x_1\\y_1\end{bmatrix}=\begin{bmatrix}\lambda_1\\1\end{bmatrix} [x1y1]=[λ11] 是满足条件的一个向量,即特征向量 x 1 = [ λ 1 1 ] \pmb{x}_1=\begin{bmatrix}\lambda_1\\1\end{bmatrix} x1=[λ11] (将 [ λ 1 1 ] \begin{bmatrix}\lambda_1\\1\end{bmatrix} [λ11] 代入到上式,并利用(5)式,上式成立,即说明 [ λ 1 1 ] \begin{bmatrix}\lambda_1\\1\end{bmatrix} [λ11] 是一个基向量)。

同理,求得另外一个特征值 λ 2 \lambda_2 λ2 所对应的特征向量 x 2 = [ λ 2 1 ] \pmb{x}_2=\begin{bmatrix}\lambda_2\\1\end{bmatrix} x2=[λ21]

{ x 1 = [ λ 1 1 ] x 2 = [ λ 2 1 ] (7) \begin{cases}\pmb{x}_1=\begin{bmatrix}\lambda_1\\1\end{bmatrix}\\\pmb{x}_2=\begin{bmatrix}\lambda_2\\1\end{bmatrix}\end{cases}\tag{7} x1=[λ11]x2=[λ21](7)
很显然,特征向量 x 1 \pmb{x}_1 x1 x 2 \pmb{x}_2 x2 线性无关,则矩阵 A = [ 1 1 1 0 ] \pmb{A}=\begin{bmatrix}1&1\\1&0\end{bmatrix} A=[1110] 可以对角化(参阅《机器学习数学基础》第3章3.3.3节)。

A = C D C − 1 \pmb{A}=\pmb{CDC}^{-1} A=CDC1 ,其中 C \pmb{C} C 的列向量即为 A \pmb{A} A 的特征向量, D \pmb{D} D 为特征向量构成的对角矩阵(参阅《机器学习数学基础》第3章3.3.3节(3.3.10)式和(3.3.11)式)。

因为: A k = C D k C − 1 \pmb{A}^k = \pmb{C}\pmb{D}^k\pmb{C}^{-1} Ak=CDkC1

于是(4)式可以转化为:

u k = C D k C − 1 u 0 (8) \pmb{u}_k=\pmb{C}\pmb{D}^k\pmb{C}^{-1}\pmb{u}_0 \tag{8} uk=CDkC1u0(8)
由于 u 0 \pmb{u}_0 u0 是一个列向量,则 C − 1 u 0 \pmb{C}^{-1}\pmb{u}_0 C1u0 结果也是列向量,故令 c = C − 1 u 0 \pmb{c}=\pmb{C}^{-1}\pmb{u}_0 c=C1u0 ,(8)式变换为:

u k = C D k c (9) \pmb{u}_k=\pmb{C}\pmb{D}^k\pmb{c}\tag{9} uk=CDkc(9)
若用一般化的式子表示, C = [ x 1 ⋯ x n ] \pmb{C} = \begin{bmatrix}\pmb{x}_1&\cdots\pmb{x}_n\end{bmatrix} C=[x1xn] (由 A \pmb{A} A n n n 个特征向量组成), D k = [ λ 1 k ⋯ 0 0 ⋱ 0 0 ⋯ λ n k ] \pmb{D}^k=\begin{bmatrix}\lambda_1^k & \cdots &0\\0&\ddots&0\\0&\cdots&\lambda_n^k\end{bmatrix} Dk= λ1k0000λnk ,代入(9)式:

u k = [ x 1 ⋯ x n ] [ λ 1 k ⋯ 0 0 ⋱ 0 0 ⋯ λ n k ] [ c 1 ⋮ c n ] = [ λ 1 k x 1 ⋯ λ n k x n ] [ c 1 ⋮ c n ] = c 1 λ 1 k x 1 + ⋯ + c n λ n k x n \begin{split}\pmb{u}_k &= \begin{bmatrix}\pmb{x}_1&\cdots\pmb{x}_n\end{bmatrix}\begin{bmatrix}\lambda_1^k & \cdots &0\\0&\ddots&0\\0&\cdots&\lambda_n^k\end{bmatrix}\begin{bmatrix}c_1\\\vdots\\c_n\end{bmatrix}\\&=\begin{bmatrix}\lambda_1^k\pmb{x}_1&\cdots&\lambda_n^k\pmb{x}_n\end{bmatrix}\begin{bmatrix}c_1\\\vdots\\c_n\end{bmatrix}\\&=c_1\lambda_1^k\pmb{x}_1+\cdots+c_n\lambda_n^k\pmb{x}_n\end{split} uk=[x1xn] λ1k0000λnk c1cn =[λ1kx1λnkxn] c1cn =c1λ1kx1++cnλnkxn
即:

u k = c 1 λ 1 k x 1 + ⋯ + c n λ n k x n (10) \pmb{u}_k=c_1\lambda_1^k\pmb{x}_1+\cdots+c_n\lambda_n^k\pmb{x}_n\tag{10} uk=c1λ1kx1++cnλnkxn(10)
k = 0 k=0 k=0 ,则(9)式即为: u 0 = C D 0 c = C I c = C c \pmb{u}_0=\pmb{CD}^0\pmb{c}=\pmb{CIc}=\pmb{Cc} u0=CD0c=CIc=Cc ,从而得到(10)式中的系数 c 1 , ⋯ , c n c_1,\cdots,c_n c1,,cn 。(10)式即为差分方程的通解(《机器学习数学基础》第3章3.2.2节,给出了差分方程通解的另外一种计算方法,在该方法中没有使用对矩阵 A \pmb{A} A 可对角化的假设)。

现在将 A = [ 1 1 1 0 ] \pmb{A}=\begin{bmatrix}1&1\\1&0\end{bmatrix} A=[1110] 的特征向量(7)和特征值(6)式分别代入(10)式,即得到(3)差分方程的通解:

u k = c 1 λ 1 k x 1 + c 2 λ 2 k x 2 (11) \pmb{u}_k=c_1\lambda_1^k\pmb{x}_1+c_2\lambda_2^k\pmb{x}_2 \tag{11} uk=c1λ1kx1+c2λ2kx2(11)
k = 0 k=0 k=0 时, u 0 = [ 1 0 ] \pmb{u}_0=\begin{bmatrix}1\\0\end{bmatrix} u0=[10] λ 1 0 = λ 2 0 = 1 \lambda_1^0=\lambda_2^0=1 λ10=λ20=1,代入(11)式:

[ 1 0 ] = c 1 x 1 + c 2 x 2 = c 1 [ 1 + 5 2 1 ] + c 2 [ 1 − 5 2 1 ] \begin{bmatrix}1\\0\end{bmatrix}=c_1\pmb{x}_1+c_2\pmb{x}_2=c_1\begin{bmatrix}\frac{1+\sqrt{5}}{2}\\1\end{bmatrix}+c_2\begin{bmatrix}\frac{1-\sqrt{5}}{2}\\1\end{bmatrix} [10]=c1x1+c2x2=c1[21+5 1]+c2[215 1]
解得:

{ c 1 = 1 5 c 2 = − 1 5 \begin{cases}c_1=\frac{1}{\sqrt{5}}\\c_2=-\frac{1}{\sqrt{5}}\end{cases} {c1=5 1c2=5 1
代入(11),同时将特征值和特征向量也代入,得:

u k = 1 5 ( 1 + 5 2 ) k [ 1 + 5 2 1 ] − 1 5 ( 1 − 5 2 ) k [ 1 − 5 2 1 ] = 1 5 [ ( 1 + 5 2 ) k + 1 ( 1 + 5 2 ) k ] − 1 5 [ ( 1 − 5 2 ) k + 1 ( 1 − 5 2 ) k ] = 1 5 [ ( 1 + 5 2 ) k + 1 − ( 1 − 5 2 ) k + 1 ( 1 + 5 2 ) k − ( 1 − 5 2 ) k ] \begin{split}\pmb{u}_k&=\frac{1}{\sqrt{5}}\left(\frac{1+\sqrt{5}}{2}\right)^k\begin{bmatrix}\frac{1+\sqrt{5}}{2}\\1\end{bmatrix}-\frac{1}{\sqrt{5}}\left(\frac{1-\sqrt{5}}{2}\right)^k\begin{bmatrix}\frac{1-\sqrt{5}}{2}\\1\end{bmatrix}\\&=\frac{1}{\sqrt{5}}\begin{bmatrix}\left(\frac{1+\sqrt{5}}{2}\right)^{k+1}\\\left(\frac{1+\sqrt{5}}{2}\right)^{k}\end{bmatrix}-\frac{1}{\sqrt{5}}\begin{bmatrix}\left(\frac{1-\sqrt{5}}{2}\right)^{k+1}\\\left(\frac{1-\sqrt{5}}{2}\right)^{k}\end{bmatrix}\\&=\frac{1}{\sqrt{5}}\begin{bmatrix}\left(\frac{1+\sqrt{5}}{2}\right)^{k+1}-\left(\frac{1-\sqrt{5}}{2}\right)^{k+1}\\\left(\frac{1+\sqrt{5}}{2}\right)^{k}-\left(\frac{1-\sqrt{5}}{2}\right)^{k}\end{bmatrix}\end{split} uk=5 1(21+5 )k[21+5 1]5 1(215 )k[215 1]=5 1 (21+5 )k+1(21+5 )k 5 1 (215 )k+1(215 )k =5 1 (21+5 )k+1(215 )k+1(21+5 )k(215 )k
在(3)式中假设 u k = [ F k + 1 F k ] \pmb{u}_k=\begin{bmatrix}F_{k+1}\\F_{k}\end{bmatrix} uk=[Fk+1Fk] ,对比上式,则:

F k = 1 5 [ ( 1 + 5 2 ) k − ( 1 − 5 2 ) k ] , ( k = 0 , 1 , 2 , ⋯ ) (12) F_k=\frac{1}{\sqrt{5}}\left[\left(\frac{1+\sqrt{5}}{2}\right)^{k}-\left(\frac{1-\sqrt{5}}{2}\right)^{k}\right] ,(k=0,1,2,\cdots)\tag{12} Fk=5 1 (21+5 )k(215 )k ,(k=0,1,2,)(12)
这样就得到了斐波那契数列通项表达式。

3.2 第二种方法

由于 A = [ 1 1 1 0 ] \pmb{A}=\begin{bmatrix}1&1\\1&0\end{bmatrix} A=[1110] 可对角化,根据 A = C D C − 1 ⇒ A k = C D k C − 1 \pmb{A}=\pmb{CDC}^{-1}\Rightarrow\pmb{A}^k = \pmb{C}\pmb{D}^k\pmb{C}^{-1} A=CDC1Ak=CDkC1 得:

A k = C [ λ 1 k 0 0 λ 2 k ] C − 1 (13) \pmb{A}^k=\pmb{C}\begin{bmatrix}\lambda_1^k&0\\0&\lambda_2^k\end{bmatrix}\pmb{C}^{-1}\tag{13} Ak=C[λ1k00λ2k]C1(13)
其中 C = [ λ 1 λ 2 1 1 ] \pmb{C}=\begin{bmatrix}\lambda_1&\lambda_2\\1&1\end{bmatrix} C=[λ11λ21] C \pmb{C} C 由特征向量 x 1 \pmb{x}_1 x1 x 2 \pmb{x}_2 x2 构成),则 C − 1 = [ 1 λ 1 − λ 2 λ 2 λ 2 − λ 1 1 λ 2 − λ 1 λ 1 λ 1 − λ 2 ] = 1 λ 1 − λ 2 [ 1 − λ 2 − 1 λ 1 ] \pmb{C}^{-1}=\begin{bmatrix}\frac{1}{\lambda_1-\lambda_2}&\frac{\lambda_2}{\lambda_2-\lambda_1}\\\frac{1}{\lambda_2-\lambda_1}&\frac{\lambda_1}{\lambda_1-\lambda_2}\end{bmatrix}=\frac{1}{\lambda_1-\lambda_2}\begin{bmatrix}1&-\lambda_2\\-1&\lambda_1\end{bmatrix} C1=[λ1λ21λ2λ11λ2λ1λ2λ1λ2λ1]=λ1λ21[11λ2λ1]

由(4)式可得:

[ F k + 1 F k ] = A k [ 1 0 ] \begin{bmatrix}F_{k+1}\\F_k\end{bmatrix}=\pmb{A}^k\begin{bmatrix}1\\0\end{bmatrix} [Fk+1Fk]=Ak[10]
将(13)代入上式,可得:

[ F k + 1 F k ] = C [ λ 1 k 0 0 λ 2 k ] C − 1 [ 1 0 ] = 1 λ 1 − λ 2 [ λ 1 λ 2 1 1 ] [ λ 1 k 0 0 λ 2 k ] [ 1 − λ 2 − 1 λ 1 ] [ 1 0 ] = 1 λ 1 − λ 2 [ λ 1 k + 1 − λ 1 k + 1 λ 1 k − λ 2 k ] \begin{split}\begin{bmatrix}F_{k+1}\\F_k\end{bmatrix}&=\pmb{C}\begin{bmatrix}\lambda_1^k&0\\0&\lambda_2^k\end{bmatrix}\pmb{C}^{-1}\begin{bmatrix}1\\0\end{bmatrix}\\&=\frac{1}{\lambda_1-\lambda_2}\begin{bmatrix}\lambda_1&\lambda_2\\1&1\end{bmatrix}\begin{bmatrix}\lambda_1^k&0\\0&\lambda_2^k\end{bmatrix}\begin{bmatrix}1&-\lambda_2\\-1&\lambda_1\end{bmatrix}\begin{bmatrix}1\\0\end{bmatrix}\\&=\frac{1}{\lambda_1-\lambda_2}\begin{bmatrix}\lambda_1^{k+1}-\lambda_1^{k+1}\\\lambda_1^k-\lambda_2^k\end{bmatrix}\end{split} [Fk+1Fk]=C[λ1k00λ2k]C1[10]=λ1λ21[λ11λ21][λ1k00λ2k][11λ2λ1][10]=λ1λ21[λ1k+1λ1k+1λ1kλ2k]
所以,通项表达式:

F k = λ 1 k − λ 2 k λ 1 − λ 2 = ( 1 + 5 2 ) k − ( 1 − 5 2 ) k ( 1 + 5 2 ) − ( 1 − 5 2 ) = 1 5 [ ( 1 + 5 2 ) k − ( 1 − 5 2 ) k ] , ( k = 0 , 1 , 2 , ⋯ ) \begin{split}F_k&=\frac{\lambda_1^k-\lambda^k_2}{\lambda_1-\lambda_2}=\frac{\left(\frac{1+\sqrt{5}}{2}\right)^k-\left(\frac{1-\sqrt{5}}{2}\right)^k}{\left(\frac{1+\sqrt{5}}{2}\right)-\left(\frac{1-\sqrt{5}}{2}\right)}\\&=\frac{1}{\sqrt{5}}\left[\left(\frac{1+\sqrt{5}}{2}\right)^{k}-\left(\frac{1-\sqrt{5}}{2}\right)^{k}\right] ,(k=0,1,2,\cdots)\end{split} Fk=λ1λ2λ1kλ2k=(21+5 )(215 )(21+5 )k(215 )k=5 1 (21+5 )k(215 )k ,(k=0,1,2,)

与(12)式一样的结果。


http://www.ppmy.cn/embedded/167315.html

相关文章

哈希表入门到精通:从原理到 Python 实现全解析

系列文章目录 01-从零开始掌握Python数据结构:提升代码效率的必备技能! 02-算法复杂度全解析:时间与空间复杂度优化秘籍 03-线性数据结构解密:数组的定义、操作与实际应用 04-深入浅出链表:Python实现与应用全面解析 …

排序算法适合的场景

排序算法的选择取决于数据规模、特性、稳定性需求、内存限制等因素。以下为常见排序算法及其适用场景: 1. 简单排序算法(O(n)) 冒泡排序 场景:数据量极小(如 n ≤ 100)或几乎有序;教学演示。缺点…

【面试手撕】多线程/并发编程

文章目录 前言三个线程,交替打印A、B、C两个线程1~100交替输出奇数和偶数10个线程,每个线程1w,最终变量到达10w模拟死锁让三个线程怎么串行执行1.使用join方法2.使用CountDownLatch 前言 本文总结面试中常考的手撕多线程问题。 三个线程&am…

排序算法模板——归并,快排【C++】

前言 二者都是分治思想的体现,区别是归并是以整个数组的mid(下标的中间值)来分,分别将左右两个区间排好序,再合并;而快排是以数组中的一个数来划分,将小于等于这个数的放在该数左边&#xff0c…

重构清洁想象,石头科技首创五轴仿生机械手打破传统清洁边界

2月25日,主题为“重构清洁想象”的石头科技2025发布会在上海天文馆正式召开。石头科技清洁产品BU总裁钱启杰在会上宣布,石头科技正式成为上海天文馆授权合作伙伴,希望借助航天科技到家庭科技的跨越,进一步简化家庭清洁工作&#x…

电商评论数据实现每秒百级评论数据的实时抓取

电商评论数据蕴含用户情感与产品改进方向。本文基于Go语言NSQ消息队列,实现每秒万级评论数据的实时抓取与情感分析。 1. ​系统架构与核心代码​ go package mainimport ("github.com/nsqio/go-nsq""encoding/json" )// 评论数据模型 type Com…

minio作为K8S后端存储

docker部署minio mkdir -p /minio/datadocker run -d \-p 9000:9000 \-p 9001:9001 \--name minio \-v /minio/data:/data \-e "MINIO_ROOT_USERjbk" \-e "MINIO_ROOT_PASSWORDjbjbjb123" \quay.io/minio/minio server /data --console-address ":90…

LLaMA中的微调方法

LoRA(Low-Rank Adaptation)是一种用于微调大型预训练模型的高效方法,特别适用于自然语言处理(NLP)任务。其核心思想是通过低秩分解来减少参数量,从而在保持模型性能的同时降低计算和存储成本。 关键点 低秩…