Python【算法示例】:斐波那契数列的两个时间复杂度
斐波那契数列
概述:
斐波那契数列又称为黄金分割数列,指的是这样的数列:2,1,1 3,5,8 , 13, 21, 34,... 数学上,斐波那契数列的递归定义如下:F (0) = 0, F ( 1)=1, F(n)=F(n-1 )+F(n -2) ( n≥2, n∈N*) 在现代物理学、准晶体结构、化学等领域,斐波那契数列都有直接的应用。为此,美国数学会从1963年起出版了名为《斐波纳契数列季刊》的数学期刊,专门发表该领域的研究成果。
解:
求解F(n)斐波那契数列常用的算法有两种:递归算法和非递归算法。尝试分析这两种算法的时间复杂度。
1 递归算法
123456789101112 | #!/usr/bin/env python # -*- 编码:utf-8 -*- defdefdef❙tin : 返回 -❙fibonacci(n)2 + fibonacci (n -) fibonacci( 100 ) |
时间复杂度:求解 F(n) ,首先需要计算 F(n-1) 和 F(n-2),计算 F(n-1) 和 F(n-2 ) ,首先需要计算 F(n-3) 和 F(n-4) 。 。 。 。 。 。以此类推,直到首先要计算F(1)和F(0),然后通过反演即可得到F(n-1)和F(n-2)的结果,所以F(n)需要许多重复值的计算。 ,这造成了极大的时间浪费。算法的时间复杂度随着N的增加呈指数增长,时间复杂度为O(2^n),即2
2的n次方 非递归算法
12345678910111213141516 | #!/usr/bin /env python # -*- 编码:utf-8 -*- def fibonacci(n):♷‼️和 = = ♷100
|
算法复杂度:从n>2开始计数,将两个数字相加并F(n-2) ),求出结果。这避免了许多重复计算,并且比递归算法更有效。快得多,算法的时间复杂度与n成正比,即算法的时间复杂度为O(n)
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。