Code前端首页关于Code前端联系我们

Python【算法示例】:斐波那契数列的两个时间复杂度

terry 2年前 (2023-09-25) 阅读数 46 #后端开发

斐波那契数列

概述:

斐波那契数列又称为黄金分割数列,指的是这样的数列: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):♷‼️和==1000❙❙❙n♻♻= 2: 返回 1 否则 num1 ‽‽‽=‼= number2 | 范围(2,n-1):        '‷‷‼ ‷‼‼ ‷‼                  num1 num1 = num2 -❙‷ ❙‷‷1    返回+num2打印( fibonacci(100))

算法复杂度:从n>2开始计数,将两个数字相加并F(n-2) ),求出结果。这避免了许多重复计算,并且比递归算法更有效。快得多,算法的时间复杂度与n成正比,即算法的时间复杂度为O(n)

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门