首页 > 编程语言 >【编程实践】手把手带你利用Python简单实现斐波那契数列

【编程实践】手把手带你利用Python简单实现斐波那契数列

时间:2022-12-27 22:32:03浏览次数:54  
标签:数列 Python 列表 斐波 索引 序列 那契

前言

什么是斐波那契数列?

斐波那契数列的提出者,是意大利数学家列昂纳多·斐波那契(Leonardo Fibonacci),生于公元1170年,卒于1250年,籍贯是比萨。他被人称作“比萨的列昂纳多”。当年斐波纳契数列是斐波那契以兔子繁殖的案例引入,所以也称为兔子数列,指的是这样一个数组:0,1,1,2,3,5,8,13,21,34,55,89,144,233,377......

斐波那契数列又称黄金分割数列,是不是听到黄金分割就觉的很高大上,的确斐波那契数列应用领域很广泛很高大上,特别是在现代物理,准晶体结构、化学等领域,斐波那契数列都有直接的应用。为此,美国数学会从1963起出版了以《斐波那契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。由此可见斐波那契数列的重要性

在数学上,斐波纳契数列被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*),在编程实现中,递归也是常用于实现斐波那契数列的求解。下图仅为fibo(3)一项的计算:

【编程实践】手把手带你利用Python简单实现斐波那契数列_斐波那契数列

【编程实践】手把手带你利用Python简单实现斐波那契数列_数组_02

上图为通项公式,又称为“比内公式”,是用无理数表示有理数的一个范例。

注:此时a1=1,a2=1,an=a(n-1)+a(n-2)(n>=3,n∈N*)

下图为通项公式的推导式:利用特征方程(线性代数解法)

线性递推数列的特征方程为:

【编程实践】手把手带你利用Python简单实现斐波那契数列_数组_03

下面为推导过程,解得

【编程实践】手把手带你利用Python简单实现斐波那契数列_斐波那契数列优化_04

涉及到的Python知识点

序列

在数学中,序列称为数列。是指按照一定顺序排列的一列数字,比如斐波那契数列。在Python编程中,序列是最基本的数据结构,是用于存放多个连续内存空间,并且按一定顺序排列,每一个值都分配一个数字,这个数字被称为索引,我们可以通过该索引取出相应的值。Python存在5个常用的序列结构,分别为:列表,元组,集合,字典和字符串。像列表和字典在其他编程语言中可能称为数组,比如在PHP中,类似于列表格式的数组是最基本的,字典更像是关联数组,键唯一,且值可重复,最大的区别是,字典是无序的。所以无法通过索引去访问数据,但是php中的关联数组是有索引的,可以通过键去去访问,又可以通过索引去访问。

序列的索引可以是整数索引,也可以是负数索引,正数索引是从0开始,即下标为0表示第一个元素,下标为1表示第二个元素,·····以此类推

如果是负数索引,-1代表倒数第一个元素,-2代表倒数第二个元素,以此类推,如果序列中有n个元素,那-n就是第一元素,对应正数索引的下标为0的元素

除了可以使用索引来访问序列中的数据,还可以通过切片的方式来访问列表中的元素,他可以访问一定范围内的元素,使用切片操作还可以操作生成一个新的序列。语法如下:

sname[start: end: step]

  • sname:序列的名称或者说是变量名
  • start:切片开始的位置,如果不指定,则默认是0
  • end:切片的截止位置,如果不指定,默认是序列的长度
  • step:切片的步长,如果省略,默认为1,当省略该步长时,最后一个冒号也可以省略

序列的几种数据类型的用法基本类似,有关于序列的基本用法,这里就不再一一赘述,感兴趣的同学可以参考之前写过的相关文章:

《​​Python3 详细的数组基础操作 - 入门必备 [列表的操作]​

《​​五分钟拿捏 Python 字典 -Python3 入门必备 [字典详细操作]​

《​​Python 已有列表和字典, 为什么还需要元组?​

《​​唠唠 python 的作用域, 看看每个变量都为自己打下了多少江山​

接下来,咱们直接进入正题--利用Python实现斐波那契数列

斐波那契数列的实现流程

实现流程如下:

  1. 输入要打印的斐波那契数列项数n
  2. 判断需要输出的项数n是否等于1,若是,则返回列表[0],并输出返回列表,否则,则继续判断需要输出的项数n是否等于2,若是,则返回列表[0,1]并且输出返回的列表.否则初始化列表[0,1]和位置参数i
  3. 判断i是否小于需要输出的项数n.若是,则执行l.append()方法,将列表中的最后一项和倒数第二项添加到列表中;否则返回列表
  4. 输出返回的列表

【编程实践】手把手带你利用Python简单实现斐波那契数列_斐波那契数列_05

代码实现:

定义fibo()函数,实现斐波那契数列的计算,并返回数列

def fibo(n):
a = 0
b = 1
i = 0
l = []
while i < n :
l.append(a)
a,b = a+b,a
i += 1
return l

验证函数:

n = int(input("请输入斐波那契数列的项数:"))
print(fibo(n))

执行结果:

【编程实践】手把手带你利用Python简单实现斐波那契数列_数组_06

使用递归的方式实现斐波那契数列:

def fibo(n):
if n<=1:
return n
else:
return(fibo(n-1)+fibo(n-2))

n = int(input("请输入斐波那契数列的项数:"))

if n <=0:
print("请输入大于0的整数!")
else:
print("斐波那契数列:")
l=[]
for i in range(n):
l.append(fibo(i))

print(l)

执行结果如下:

【编程实践】手把手带你利用Python简单实现斐波那契数列_图解算法_07

标签:数列,Python,列表,斐波,索引,序列,那契
From: https://blog.51cto.com/micai01/5973658

相关文章

  • [oeasy]python0033_任务管理_jobs_切换任务_进程树结构_fg
    查看进程回忆上次内容上次先进程查询​​ps-elf​​查看所有进程信息​​ps-lf​​查看本终端相关进程信息杀死进程​​kill-9PID​​给进程发送死亡信号运行多个......
  • Python__15--元组
    1元组Python的元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组使用圆括号包含元素,而列表使用方括号包含元素。元组的创建,只需在圆括号中添加元素并使用逗号分......
  • python:You should consider upgrading via the 'python -m pip install --upgrade pi
    环境: MicrosoftWindows10家庭版 10.0.19044  python3.7.4今天使用命令"pipinstallpyinstaller"准备安装pyinstaller时报错(如下图):Youareusingpipversion......
  • python学习: fire库的使用教程
    一.介绍fire是python中用于生成命令行界面(CommandLineInterfaces,CLIs)的工具,不需要做任何额外的工作,只需要从主模块中调用fire.Fire(),它会自动将你的代码转化为CLI,F......
  • Python之多任务编程概述
    一、疑问利用现学知识能够让两个函数或者方法同时执行吗?不能,因为之前所写的程序都是单任务的,也就是说一个函数或者方法执行完成另外一个函数或者方法才能执行,要想实现这种......
  • Python之多任务编程进程
    一、进程概述1.进程的介绍在Python程序中,想要实现多任务可以使用进程来完成,进程是实现多任务的一种方式。2.进程的概念一个正在运行的程序或者软件就是一个进程,它是操作系......
  • 覆盖 python_python文件读写模式,覆盖写和清空写你清楚了吗
    https://blog.csdn.net/u011280778/article/details/104283319https://blog.csdn.net/weixin_39873356/article/details/112585266?utm_medium=distribute.pc_relevant.no......
  • pyqt5-python交互
    安装pyqt5,算是框架,直接在pycharm库里面搜pyqt5就行了安装可视化设计器QtDesigner,这个去官网下载就可以了,不过最好找个中文版的下载。在pycharm上配置插件,好让pych......
  • 11个案例讲透 Python 函数参数
    今天给大家分享一下自己整理的一篇Python参数的内容,内容非常的干,全文通过案例的形式来理解知识点,自认为比网上80%的文章讲的都要明白,如果你是入门不久的python新手,......
  • Python学习笔记--PySpark的基础学习(二)
    filter方法(过滤想要的数据进行保留)具体实现(保留奇数):具体实现(保留偶数):distinct方法(对RDD进行去重,返回新的RDD)且无需传参具体实现(去重):sortBy方法(排序,基于我们制定的......