在 Python 中实现斐波那契数列
已发表: 2023-02-23Python 是一种功能强大且用途广泛的多用途编程语言,可促进人工神经网络的实施,并支持自然语言处理、深度学习、面部识别、遗传算法以及更多此类最先进的基于 AI 的任务。
本文探讨了 Python 可用于准确生成斐波那契数列的一些主要方法——这是相对简单算法的一个很好的例子,这些算法不仅本身有用,而且通常是构建能够进行复杂计算的高级程序的基础认知功能。
目录
什么是斐波那契数列?
斐波那契数列可能是人类已知的最简单、已知最早和最著名的数学数列之一。
它是一个连续的整数序列,其中每个连续的数字等于其前两个数字的总和斐波那契数列从 0 和 1 开始,并按如下方式进行:0、1、1、2、3、5、8、13 、21、34、55、89、144、233、377、610、987、1597、2584、4181、6765、10946、17711、28657、46368等。
以零为起点,斐波那契数列以双向方式无限延伸如下:
…610, -377, 233, -144, 89, -55, 34, -21, 13, -8, 5, -3, 2, -1, 1, 0 , 1, 1, 2, 3, 5 , 8, 13, 21, 34, 55, 89, 144, 233, 377, 610……零左边的序列被称为“负斐波那契”序列。
查看我们的免费技术课程,在竞争中脱颖而出。
斐波那契数列在数学上可以表示如下:
n | 0 | 1个 | 2个 | 3个 | 4个 | 5个 | 6个 | 7 | 8个 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
xn _ | 0 | 1个 | 1个 | 2个 | 3个 | 5个 | 8个 | 13 | 21 | 34 | 55 | 89 | 144 | 233 | 377 | 610 |
其中 n 是项数,x n是项值。 计算项值 x n 的公式为:
x n = x n-1 + x n-2
因此,例如,第 8 项的值是:
x 8 = x 7 + x 6
x 8 = 13 + 8
× 8 = 21
这里有一些与斐波那契数列相关的琐事:斐波那契日是在 11 月 23 日,因为该日期可能由数字 1、1、2 和 3 表示——它们代表斐波那契数列中正确排序的部分。
探索我们的热门软件工程课程
LJMU & IIITB 计算机科学硕士 | 加州理工学院 CTME 网络安全证书课程 |
全栈开发训练营 | 区块链PG项目 |
全栈开发中的执行 PG 计划 | |
在下面查看我们所有的课程 | |
软件工程课程 |
斐波那契数列的历史和起源
Leonardo Pisano Bogollo,俗称斐波那契,在意大利口语中大致翻译为“博纳奇之子”。
斐波那契因制定了这个特殊的数字序列而受到赞誉,因此以他的名字命名。 公元 13 世纪初,他通过具有里程碑意义的著作《算盘算盘》将其介绍到西欧的大部分地区。
斐波那契被广泛认为是他那个时代最有才华的数学家之一,顺便说一下,他还因印度-阿拉伯数字在整个欧洲的广泛采用而受到赞誉,而在此之前,欧洲一直在使用更为笨重的罗马数字。
然而,如今已知的斐波那契数列早在公元前 3 世纪就已在古印度使用。
它在 Pingala-sutras(一部古老的梵文韵律论着)和 Natya Shastra(一部关于古代印度表演艺术的论着)中都有表达,分别归功于古印度受人尊敬的圣人 Acharya Pingala 和 Bharata Muni。
对这一序列最权威的评论出现在公元 8 世纪初维拉汉卡 (Virahanka) 的著作中。 虽然这段文字本身并没有被追查到,但在公元 1135 年戈帕拉的作品中被引用并被广泛引用。 巧合的是,那一年的数字代表了一个连续的斐波那契数列。
另一位研究韵律节奏的印度学者 Acharya Hemachandra 被认为对音序非常了解,他在公元 1150 年对此进行了详细描述。 这比斐波那契的工作早了 50 多年。
查看 upGrad 的软件开发课程
比奈公式
与所有具有常数系数的常数递归序列一样,斐波那契数列可以表示为一个封闭形式的表达式,后来被称为比奈公式。 以 19 世纪初法国著名数学家 Jacques Philippe Marie Binet 的名字命名的 Binet 公式可以表示如下:
鉴于 F n是第 n 个斐波那契数:
从上面的公式可以得出这样一个事实,除了前几个数字,斐波那契数列中每对连续数字之间的比率逐渐收敛于所谓的黄金比例——1:1.618,用第 21 位表示希腊字母表中的字母 – Φ (phi)。
这意味着系列中的每个数字都是它后面的斐波那契数的 0.6180339887,或者每个连续的数字都是斐波那契数列中它前面的数字的 1.6180339887 倍。
需求软件开发技能
JavaScript 课程 | 核心 Java 课程 | 数据结构课程 |
Node.js 课程 | 课程 | 全栈开发课程 |
NFT课程 | 开发运营课程 | 大数据课程 |
React.js 课程 | 网络安全课程 | 云计算课程 |
数据库设计课程 | Python 课程 | 加密货币课程 |
斐波那契数列和黄金比例
斐波那契数列及其衍生物黄金比例的重要性因其在自然界中异常频繁的出现而得到显着提高。 一些最常见的例子包括:
- 一朵花的花瓣数几乎总是斐波那契数,无论是 3 瓣百合、5 瓣毛茛、21 瓣菊苣花还是 34 瓣雏菊。
有趣的是,这种与斐波那契数列的坚定一致性似乎是达尔文设计的产物,因为科学家们发现,这些特殊的花瓣排列确保每一朵花都能最佳地暴露在阳光、水分和授粉媒介(如鸟类和昆虫)下. - 几乎所有自然发生的螺旋图案中都可以看到黄金比例或 Φ——从向日葵的种子头到整个星系,从松果上的突起到飓风,从菠萝上的刺到山羊角的曲率,以及小花从花椰菜到人类指纹上的螺纹。
鹦鹉螺壳的螺旋图案被认为是所谓的“斐波那契螺旋线”的特别标志性表现。 - 树木和根系的分枝、蜂箱中雄蜂和雌蜂的比例、动物身体的各个部位——从微生物到蜗牛、从海龟到鲸鱼,都符合黄金比例。
- 人体生理学的各个方面——例如我们的整体长度与从头部到指尖的距离之间的比例,或者我们的前臂与手的长度之间的比例,都是根据 Φ 设计的。
人耳中的耳蜗是斐波那契螺旋线,脐带也是如此。 甚至有人认为,我们会下意识地被高宽比例接近黄金比例的面孔所吸引。
从本质上讲,数学是一种探索万物规律的探索。 没有比在大自然中寻找这些模式更好或更普遍的舞台了。
从微生物到星系,斐波那契数列反映了从微观到宇宙规模的大量自然生理学和现象——而且有充分的理由。
黄金比例或 Φ 赋予它所表达的一切美学和功能和谐的人体工程学平衡。正是由于这个原因,黄金比例也被称为神圣比例。
但斐波那契数列的意义远远超出了自然界,它在广泛的人类活动中得到体现——跨越数学、科学和艺术。
阅读我们与软件开发相关的热门文章
如何在 Java 中实现数据抽象? | Java中的内部类是什么? | Java 标识符:定义、语法和示例 |
通过示例了解 OOPS 中的封装 | C 中的命令行参数解释 | 2022 年云计算的十大特点 |
Java 中的多态性:概念、类型、特征和示例 | Java 中的包以及如何使用它们? | Git 初学者教程:从零开始学习 Git |
使用 Python 生成斐波那契数列
斐波那契数列和黄金比例是不可或缺的各个方面:
- 代数、几何、统计学和三角学——可应用于各种经济实践和股票市场分析。
- 生物学、物理学和计算机科学——在合成生物学和遗传学、土木和机械工程、建筑、室内设计,当然还有计算机编程中都有应用。
- 艺术和平面设计以及诗歌、音乐和舞蹈
它通常是创建与上述主题及其他主题相关的各种有用应用程序的基本步骤。
斐波那契数列可以使用多种编程语言生成。 如前所述,Python 是其中最强大和最通用的之一——能够以多种方式使用和操纵斐波那契数列和斐波那契数列,以开发一些最前沿的技术解决方案。
从 IIIT Bangalore 查看 upGrad 的区块链高级证书程序员
以下是一些可以使用 Python 生成斐波那契数列的方法:
迭代方法
在这种方法中,算法:
- 分配任意两个变量来表示序列中的前两个连续项。 其中 0 代表序列的第一项,1 代表第二项。
- 设置要在序列中计算的所需项范围,并从 0 向上循环。
- 在每次迭代中,算法:
- 添加两个变量。
- 然后将第二个变量的值赋给第一个变量
和前两个变量的总和到第二个变量。 - 等等…
对应的代码会这样写:
def fibo (num) :
一 = 0
b = 1
对于 xrange(0, 20) 中的 i:
打印一个
a, b = b, a + b
相应的输出将是斐波那契数列的前二十个数字:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,
144, 233, 377, 610, 987, 1597, 2584, 4181
递归方法
在这种方法中,算法推导出:
每个连续项的值通过将前两个项的值相加得到。 这可以表示为项 n = 项 n-1 + 项 n-2。
此规则的唯一两个例外是当项的值为 0 和 1 时,两者都返回未更改的值。 这些异常可以表示为 term n = term n。
对应的代码会这样写:
def recur_fodo (n):
如果 n < = 1:
返回 n
别的:
返回 (recur_fibo (n-1) + recur_fibo (n-2) )
N 项 = 20
# 检查术语数是否有效
如果书呆子 <= 0:
打印(“请输入一个正整数”)
别的:
打印(“斐波那契数列”)
对于范围内的 i (nterms):
打印 (recur_fibo i))
相应的输出将是斐波那契数列的前二十个数字:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,
144, 233, 377, 610, 987, 1597, 2584, 4181
斐波那契数列的一些独立应用
除了作为开发各种复杂模型和应用程序的基础步骤之外,斐波那契数列本身还具有一些独特的特征,这些特征使它们在执行某些任务时具有无可估量的价值:
- 考虑到一对连续的斐波那契数通常对该算法构成最严峻的挑战,斐波那契数可用于分析欧几里德算法的计算运行时间,以确定一对随机整数的最大公约数。
- 斐波那契数列唯一地表示一个完整的数列,该数列中的每个正整数都是两个斐波那契数列之和,其中任何一个都只能使用一次。
- 基于斐波那契数列的算法帮助开发了斐波那契搜索技术、斐波那契堆数据结构和用于互连并行和分布式系统的斐波那契立方图。
- 斐波那契数列用于 scrum 扑克——一种基于共识的游戏化技术,用于估计软件开发中的开发目标。
- 斐波那契水平的回撤通常用于股票市场交易的技术分析。
综上所述
在本文中,我们试图激发您对斐波那契数列或黄金比例的兴趣——它的主要特征及其在自然界中惊人的频繁出现——无论是有生命的还是无生命的。
我们试图捕捉影响并重现这种数学现象在人类追求的广泛不同和多维范围内创造的奇迹——艺术和科学、工程和技术、解剖学和遗传学、经济学和金融……等等.
我们试图让一种叫做 Python 的极其通用的编程语言如何帮助您操纵这些数学概念,以意想不到的多种方式直接和间接地造福人类。
我们热切希望 Python 和斐波那契数列的这种强大组合已经并将继续激发您的想象力,点燃您的思想,激发您的抱负并激发您取得最大的成就。 编码愉快! 做梦快乐!
在 upGrad,我们了解实践、动手学习的重要性——尤其是在软件开发方面。 因此,我们的课程和培训计划以实用性为核心。 其中一项举措是全栈开发训练营,它将帮助您培养在全栈开发中脱颖而出所需的所有相关技能。