斐波那契数列 python 高阶解法

2022.09.27

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)

1.矩阵快速幂

n = int(input())
def mul(a, b):  # 首先定义二阶矩阵乘法运算c = [[0, 0], [0, 0]]  # 定义一个空的二阶矩阵,存储结果for i in range(2):  # rowfor j in range(2):  # colfor k in range(2):  # 新二阶矩阵的值计算c[i][j] += a[i][k] * b[k][j]return c
def fib(n):if n <= 1: return max(n, 0)res = [[1, 0], [0, 1]]  # 单位矩阵,等价于1A = [[1, 1], [1, 0]]  # A矩阵while n:if n & 1: res = mul(res, A)  # 如果n是奇数,或者直到n=1停止条件A = mul(A, A)  # 快速幂n >>= 1  # 整除2,向下取整return res[0][1]
print(fib(n))

2.使用numpy进行求解

代码更简洁,但是打比赛的时候由于numpy不能使用。

# 使用numpy进行求解
n = int(input())
import numpy as np
def fib_matrix(n):Matrix = np.matrix([[0,1],[1,1]])vec = np.array([[0],[1]])return np.matmul(Matrix**n,vec)
print(int(fib_matrix(n)[0]))

3.通项公式求解

具体证明请见:斐波那契数列通项公式是怎样推导出来的?
f ( n ) = 1 5 [ ( 1 + 5 2 ) n − ( 1 − 5 2 ) n ] f(n) = \frac{1}{\sqrt{5}} \left [ \left ( \frac{1+\sqrt{5} }{2} \right )^{n} - \left ( \frac{1-\sqrt{5} }{2} \right )^{n} \right ] f(n)=5 ​1​[(21+5 ​​)n−(21−5 ​​)n]

# 通项公式求解
n = int(input())
import numpy
import math
def Fib_general_formula(n):denominator = math.sqrt(5)return int((numpy.power((1+denominator)/2, n) - numpy.power((1-denominator)/2, n)) / denominator)
print(Fib_general_formula(n))

参考链接

1.斐波那契数列求解总结(Python版)

斐波那契数列 python 高阶解法相关推荐

  1. 用php递归求fibonacci数列,C++_C语言求Fibonacci斐波那契数列通项问题的解法总结,一:递归实现使用 - phpStudy...

    C语言求Fibonacci斐波那契数列通项问题的解法总结 一:递归实现  使用公式f[n]=f[n-1]+f[n-2],依次递归计算,递归结束条件是f[1]=1,f[2]=1. 二:数组实现  空间复 ...

  2. 斐波那契数列python递归 0、1、1、2、3_python实现斐波那契数列的多种方式

    正文共: 3269字 8图 预计阅读时间: 9分钟 每日分享 The great pleasure in life is doing what people say you cannot do. 人生 ...

  3. python剑指offer面试题_剑指offer面试题Q10 斐波那契数列 python解法

    Q10.斐波那契数列 题目描述 写一个函数,输入n,求斐波那契数列的第n项. 解题思路 思路一 递归 递归很简单但是并不能AC python实现代码 class Solution: def Fibon ...

  4. 斐波拉契数列python写法

    文章目录 第一种:递推方法 第二种:递归方式 第三种:用一个类写出比较全面的斐波拉契 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonard ...

  5. 斐波那契数列python循环算法求解_斐波那契数列的算法实现 —— python

    斐波那契数列,简单地说,起始两项为0和1,此后的项分别为它的前两项之后. (注:据我百度发现,斐波那契数列的定义并非起始的两项为0和1,而是1和1,鉴于是转发的,在这里不对原作者的文章进行改动,因为, ...

  6. 兔子生育问题·斐波那契数列·python

    小明考试非常好,妈妈为了奖励小明,给一对刚刚出生的兔子,     兔子可以经过四个月,可以长大称为成年的兔子,可以生育新的兔子,     假设成年兔子,每个月生一对小兔子,问,第n个月共有多少对兔子( ...

  7. 剑指offer: 斐波那契数列 python 实现

    题目 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 解题思路 判断n是否为0,1,2,对应特殊值: 否则返回第n项 ...

  8. 斐波那契数列python递归 0、1、1、2、3_python: 递归和递推方法求斐波那契数列

    1.  斐波那契数列 序号 0 1 2 3 4 5 6... 数列 0 1 1 2 3 5 8... 2.  三种程序 import time time1 = time.clock() #斐波那契数列 ...

  9. 斐波那契数列(python)

    定义: 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列& ...

最新文章

  1. php asort,PHP asort():对数组排序(升序),并保持索引关系
  2. 四、linux编译规则文件Makefile
  3. STM32 通用定时器基本原理
  4. Coder-Strike 2014 - Finals (online edition, Div. 2) A. Pasha and Hamsters
  5. TP3.2之WHERE组合条件处理
  6. Beta冲刺——星期三
  7. Android开发基础(四大组件及Intent)
  8. python中set函数_python中set()函数简介及实例解析
  9. python_cookie
  10. OC-引用计数器,内存管理,野指针
  11. 现代3D图形编程学习-基础简介(2) (译)
  12. linux 查看硬盘序号,Linux 查看硬盘序列号 命令
  13. 多旋翼姿态解算之Mahony互补滤波
  14. sql分组排序, 分页查询
  15. 计算机Word2010在线做题,Word2010试题练习题库(答案).doc
  16. 手把手 VM虚拟机安装deepin系统
  17. 从零开始的nrf52832蓝牙开发(2)--蓝牙模板解析
  18. 大数据利益相关者的利益矛盾及其伦理治理
  19. 解决日志打印过多问题
  20. Leetcode刷题记录 735. 行星碰撞

热门文章

  1. 新一代态势感知系统发布——北望
  2. matlab神经网络newff函数的用法
  3. Supervisor 安装与配置
  4. 2023NPDP产品经理认证如何考取?
  5. pdf合到一起java_如何将两个PDF文件合并成一个Java?
  6. Linux 系统设置 : dmesg 命令详解
  7. 线性关系r范围_一个简单线性回归和多项式回归在R中的实现示例
  8. 前端算法及手写算法JavaScript
  9. Linux查看CPU、内存、硬盘、操作系统相关详细信息
  10. 一位资深HR的职场感言