斐波那契 —— 矩阵形式推导

https://blog.csdn.net/lanchunhui/article/details/50569311

1. 矩阵形式的通项

(Fn+2Fn+1)=(1,1,10)(Fn+1Fn) ( F n + 2 F n + 1 ) = ( 1 , 1 1 , 0 ) ⋅ ( F n + 1 F n )

不妨令: A=(1,1,10),F1=1,F0=0 A = ( 1 , 1 1 , 0 ) , F 1 = 1 , F 0 = 0 ,证明, An=(Fn+1,Fn,FnFn1) A n = ( F n + 1 , F n F n , F n − 1 ) ,采用数学归纳法进行证明, A1=(F2,F1,F1F0) A 1 = ( F 2 , F 1 F 1 , F 0 ) ,显然成立,

An+1=AnA=(Fn+1,Fn,FnFn1)(1,1,10)=(Fn+2,Fn+1,Fn+1Fn) A n + 1 = A n ⋅ A = ( F n + 1 , F n F n , F n − 1 ) ⋅ ( 1 , 1 1 , 0 ) = ( F n + 2 , F n + 1 F n + 1 , F n )

2. 偶数项和奇数项

因为 An=(Fn+1,Fn,FnFn1) A n = ( F n + 1 , F n F n , F n − 1 ) ,则有:

A2m====(F2m+1,F2m,F2mF2m1)AmAm(Fm+1,Fm,FmFm1)(Fm+1,Fm,FmFm1)(F2m+1+F2m,Fm(Fm+2Fm1),Fm(Fm+2Fm1)F2m+F2m1) A 2 m = ( F 2 m + 1 , F 2 m F 2 m , F 2 m − 1 ) = A m ⋅ A m = ( F m + 1 , F m F m , F m − 1 ) ⋅ ( F m + 1 , F m F m , F m − 1 ) = ( F m + 1 2 + F m 2 , F m ( F m + 2 F m − 1 ) F m ( F m + 2 F m − 1 ) , F m 2 + F m − 1 2 )

所以有:

F2m+1=F2m+1+F2mF2m=Fm(Fm+2Fm1) F 2 m + 1 = F m + 1 2 + F m 2 F 2 m = F m ( F m + 2 F m − 1 )

3. 矩形形式求解 Fib(n)

因为涉及到矩阵幂次,考虑到数的幂次的递归解法:

  • n 为奇数: n=2k+1 n = 2 k + 1
    • Fn=F2k+1=F2k+1+F2k F n = F 2 k + 1 = F k + 1 2 + F k 2
    • Fn+1=F2k+2=Fk+1(Fk+1+2Fk) F n + 1 = F 2 k + 2 = F k + 1 ( F k + 1 + 2 F k )
  • n 为偶数: n=2k n = 2 k
    • Fn=F2k=Fk(Fk+2Fk1)=Fk(Fk+2(Fk+1Fk)) F n = F 2 k = F k ( F k + 2 F k − 1 ) = F k ( F k + 2 ( F k + 1 − F k ) )
    • Fn+1=F2k+1=F2k+1+F2k F n + 1 = F 2 k + 1 = F k + 1 2 + F k 2

4. Python

def fib(n):

    if n > 0:
        f0, f1 = fib(n // 2)
        if n % 2 == 1:
            return f0**2+f1**2, f1*(f1+2*f0)
        return f0*(f0+2*(f1-f0)), f0**2+f1**2
    return 0, 1


if __name__ == '__main__':
    print([fib(i)[0] for i in range(10)])
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值