斐波那契数列 python 高阶解法
斐波那契数列 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 高阶解法相关推荐
- 用php递归求fibonacci数列,C++_C语言求Fibonacci斐波那契数列通项问题的解法总结,一:递归实现使用 - phpStudy...
C语言求Fibonacci斐波那契数列通项问题的解法总结 一:递归实现 使用公式f[n]=f[n-1]+f[n-2],依次递归计算,递归结束条件是f[1]=1,f[2]=1. 二:数组实现 空间复 ...
- 斐波那契数列python递归 0、1、1、2、3_python实现斐波那契数列的多种方式
正文共: 3269字 8图 预计阅读时间: 9分钟 每日分享 The great pleasure in life is doing what people say you cannot do. 人生 ...
- python剑指offer面试题_剑指offer面试题Q10 斐波那契数列 python解法
Q10.斐波那契数列 题目描述 写一个函数,输入n,求斐波那契数列的第n项. 解题思路 思路一 递归 递归很简单但是并不能AC python实现代码 class Solution: def Fibon ...
- 斐波拉契数列python写法
文章目录 第一种:递推方法 第二种:递归方式 第三种:用一个类写出比较全面的斐波拉契 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonard ...
- 斐波那契数列python循环算法求解_斐波那契数列的算法实现 —— python
斐波那契数列,简单地说,起始两项为0和1,此后的项分别为它的前两项之后. (注:据我百度发现,斐波那契数列的定义并非起始的两项为0和1,而是1和1,鉴于是转发的,在这里不对原作者的文章进行改动,因为, ...
- 兔子生育问题·斐波那契数列·python
小明考试非常好,妈妈为了奖励小明,给一对刚刚出生的兔子, 兔子可以经过四个月,可以长大称为成年的兔子,可以生育新的兔子, 假设成年兔子,每个月生一对小兔子,问,第n个月共有多少对兔子( ...
- 剑指offer: 斐波那契数列 python 实现
题目 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 解题思路 判断n是否为0,1,2,对应特殊值: 否则返回第n项 ...
- 斐波那契数列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() #斐波那契数列 ...
- 斐波那契数列(python)
定义: 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列& ...
最新文章
- php asort,PHP asort():对数组排序(升序),并保持索引关系
- 四、linux编译规则文件Makefile
- STM32 通用定时器基本原理
- Coder-Strike 2014 - Finals (online edition, Div. 2) A. Pasha and Hamsters
- TP3.2之WHERE组合条件处理
- Beta冲刺——星期三
- Android开发基础(四大组件及Intent)
- python中set函数_python中set()函数简介及实例解析
- python_cookie
- OC-引用计数器,内存管理,野指针
- 现代3D图形编程学习-基础简介(2) (译)
- linux 查看硬盘序号,Linux 查看硬盘序列号 命令
- 多旋翼姿态解算之Mahony互补滤波
- sql分组排序, 分页查询
- 计算机Word2010在线做题,Word2010试题练习题库(答案).doc
- 手把手 VM虚拟机安装deepin系统
- 从零开始的nrf52832蓝牙开发(2)--蓝牙模板解析
- 大数据利益相关者的利益矛盾及其伦理治理
- 解决日志打印过多问题
- Leetcode刷题记录 735. 行星碰撞