递归函数斐波那契数列python_使用Python函数递归实现斐波那契数列时为什么运行速度很慢?...

你看看你递归代码的复杂度 是O(2^n) 而第二个的复杂度是O(n) 运行效率当然不同

COUNTER = 0

def fibn(n):

global COUNTER

COUNTER += 1

if n == 0:

return 1

elif n == 1:

return 1

else:

return fibn(n-1) + fibn(n-2)

statistics = []

for i in range(35):

COUNTER = 0

fibn(i + 1)

statistics.append(((i + 1), COUNTER))

print statistics[(1, 1), (2, 3), (3, 5), (4, 9), (5, 15), (6, 25), (7, 41), (8, 67), (9, 109), (10, 177), (11, 287), (12, 465), (13, 753), (14, 1219), (15, 1973), (16, 3193), (17, 5167), (18, 8361), (19, 13529), (20, 21891), (21, 35421), (22, 57313), (23, 92735), (24, 150049), (25, 242785), (26, 392835), (27, 635621), (28, 1028457), (29, 1664079), (30, 2692537), (31, 4356617), (32, 7049155), (33, 11405773), (34, 18454929), (35, 29860703)]

做了一个简单的proflie

import cProfile

import pstats

def fibn(n):

if n == 0:

return 1

elif n == 1:

return 1

else:

return fibn(n-1) + fibn(n-2)

print ' i, calls, time'

for i in range(50):

pr = cProfile.Profile()

pr.enable()

fibn(i)

pr.disable()

stats = pstats.Stats(pr)

stats.strip_dirs()

st = stats.stats[('test1.py', 3, 'fibn')]

print '%3d,%10d,%8f' % (i, st[1], st[3])i, calls, time

0, 1, 0.000000

1, 1, 0.000001

2, 3, 0.000003

3, 5, 0.000005

4, 9, 0.000008

5, 15, 0.000012

6, 25, 0.000020

7, 41, 0.000033

8, 67, 0.000165

9, 109, 0.000088

10, 177, 0.000141

11, 287, 0.000228

12, 465, 0.000450

13, 753, 0.000601

14, 1219, 0.001016

15, 1973, 0.003561

16, 3193, 0.002593

17, 5167, 0.004372

18, 8361, 0.007097

19, 13529, 0.011073

20, 21891, 0.018552

21, 35421, 0.032467

22, 57313, 0.051762

23, 92735, 0.095383

24, 150049, 0.133490

25, 242785, 0.212390

26, 392835, 0.352861

27, 635621, 0.578204

28, 1028457, 0.987839

29, 1664079, 1.506812

30, 2692537, 2.682802

31, 4356617, 3.998936

32, 7049155, 8.089419

33, 11405773, 13.058235

34, 18454929, 23.930004

35, 29860703, 36.503880

目测fibn(50)要算出来需要两周

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306784.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

还在犹豫是否迁移.NET5?这几个项目已经上线了!

.NET5正式发布有十多天,博客园、知乎、技术群都讨论的非常热烈。关于项目是否迁移.NET5的话题讨论的尤为热烈,作为.NET十年老司机要告诉你,.NET5的迁移势在必行,当下就是最好的时机!犹豫项目是否升级到.NET5的&#xf…

Android切换泰语,Android应用内切换语言

首先扯点别的:这是第一次在简书上写东西,我突然明白为啥这么多人在简书上写东西了,因为没有广告啊,哈哈。最近接触到Android 应用内切换语言的问题,研究了两天,做个记录先。实现了中文,英文&…

工程勘察设计收费标准2002修订版_黑龙江省哈尔滨新区智能轨道快运系统1号线项目勘察设计招标...

黑龙江省哈尔滨新区智能轨道快运系统1号线项目勘察设计第一标段招标公告招标编号:JTZGSJ20200011.招标条件本招标项目黑龙江省哈尔滨新区智能轨道快运系统1号线项目勘察设计已由上级部门批准建设,项目业主为哈尔滨交通集团有限公司,建设资金来…

从 3.1 到 5.0 —— OpenReservation 更新记

OpenReservation 从 asp.net core 3.1 到 5.0IntroOpenReservation 是一个开源的预约系统,最初的版本是我们学校的活动室预约系统,现在正逐步变成一个更为通用的预约系统。.NET5 发布之后也是把这个项目更新到了 5.0。这个项目是一个做了很长时间的项目&…

html如何显示上传进度条,HTML5 Ajax文件上传进度条如何显示

这篇文章主要介绍了HTML5 Ajax文件上传进度条是如何显示的,基于原生html5实现,不需要falsh支持,进度可以自定义显示,控制灵活,对HTML5上传进度条感兴趣的小伙伴们可以参考一下原本打算使用jquery插件进行异步文件上传&…

数据结构——哈弗曼编码问题

实验六 基于哈夫曼树的数据压缩算法 【实验目的】 掌握哈夫曼树的构造算法。掌握哈夫曼编码的构造算法。 【实验内容】 问题描述 输入一串字符,根据给定的字符串中字符出现的频率建立相应的哈夫曼树, 构造哈夫曼编码表,在此基础上可以对压缩文件进行压缩(即编码),同时可以对 压…

relation does not exist报错是什么意思_为什么Zookeeper天生就是一副分布式锁的胚子?...

“ 什么是分布式锁?分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。图片来自 Pexels如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候&#xff0…

netcore一键部署到linux服务器以服务方式后台运行

AntDeploy 是我开发一款开源一键发布插件将本地vs中的代码,一键打包,部署到任意的远程服务器部署方式支持 windows服务,linux服务,docker容器,iis支持增量发布(只更新有修改的)支持一键回滚(出了问题快速恢复)支持查看…

王某调离岗位后所使用计算机由新到任陈某,2017年沧州事业单位考试模拟卷

55. 关于刑法,表述正确的有:A.对于累犯不适用缓刑B.某甲犯故意杀人罪,但是有可能被适用缓刑C.已满十四周岁不满十六周岁的人不负刑事责任D.紧急避险超过必要限度造成不应有的损害的,应当负刑事责任56. 甲在回家途中发现乙正持刀追…

数据结构——基于 Dijsktra 算法的最短路径求解

实验七 基于 Dijsktra 算法的最短路径求解 【实验目的】 掌握图的邻接矩阵表示法,掌握采用邻接矩阵表示法创建图的算法。掌握求解最短路径的 Dijsktra 算法。 【实验内容】 问题描述 一张地图包括 n 个城市,假设城市间有 m 条路径(有向图),每条路径的长度 已知。给…

loadrunner录制事件为0_测试工具LoadRunner常见问题汇总,解决方案整理

LoadRunner是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,可适用于各种体系架构的自动负载测试,能预测系统行为并评估系统性能。我们在使用它进行测试的过程中经常会遇到一些错误&…

.NET应用如何优雅的实现功能定时开关

点击上方蓝字关注“汪宇杰博客”导语我们在打工的时候,总能遇到一种类型的需求:“我想要这个活动广告在双11期间才显示”,“我想要这个API在20号以后才开放”,可能你觉得这个需求没什么难的,写个时间判断不就行了&…

用计算机组成原理+唐朔飞的,计算机组成原理 唐朔飞 习题解答

地址总线:用来指出数据总线上的源数据或目的数据在贮存单元的地址,是单向传输的,其位数与存储单元的个数有关(几次幂的关系)控制总线:用来发出各种控制信号的,对任意控制线,是单向的;对与机器字…

数据结构——图-迪杰斯特拉算法

问题描述 将图以邻接矩阵或邻接表存储&#xff0c;实现Dijkstra算法。 算法设计 迪杰斯特拉算法&#xff1a; 1.假设用带权的邻接矩阵arc&#xff0c;来表示带权有向图&#xff0c;arc[i][j]&#xff0c;表示弧<vi,vj>上的权值。若<vi,vj>不存在&#xff0c;则置…

单体 soa 微服务 区别_漫谈何时从单体架构迁移到微服务?

面对微服务如火如荼的发展&#xff0c;很多人都在了解&#xff0c;学习希望能在自己的项目中帮得上忙&#xff0c;当你对微服务的庐山真面目有所了解后&#xff0c;接下来就是说服自己了&#xff0c;到底如何评估微服务&#xff0c;什么时候使用微服务&#xff0c;什么时间点最…

2020了,最流行的密码依旧是123456

喜欢就关注我们吧&#xff01;密码管理器 NordPass 于日前发布的一份报告中揭示了 2020 年最常见的密码&#xff0c;并提供了有关如何使密码更安全的建议。根据 NordPass 的研究&#xff0c;在今年 200 种最常用的密码中&#xff0c;“123456”位居第一&#xff0c;有 250 万人…

计算机二级和英语四六级是同一个账号吗,英语四六级考试和计算机考试的登录账号和密码一样吗?我好像混了,但是密码一直输不对,...

两个密码都记得直接试就出来了非常的简单&#xff0c;如果实在不行的话重置一下大学英语六级考试(又称CET-6&#xff0c;全称为“College English Test-6”)是由国家统一出题的&#xff0c;统一收费&#xff0c;统一组织考试&#xff0c;用来评定应试人英语能力的全国性的考试&…

元祖python_python---tuple元祖

ython的元组与列表类似&#xff0c;不同之处在于元组的元素不能修改。 元组使用小括号&#xff0c;列表使用方括号。 元组创建很简单&#xff0c;只需要在括号中添加元素&#xff0c;并使用逗号隔开即可。 tup1 (physics, chemistry, 1997, 2000) tup2 (1, 2, 3, 4, 5 ) tup3…

C# 中的本地函数

今天我们来聊一聊 C# 中的本地函数。本地函数是从 C# 7.0 开始引入&#xff0c;并在 C# 8.0 和 C# 9.0 中加以完善的。引入本地函数的原因我们来看一下微软 C# 语言首席设计师 Mads Torgersen 的一段话&#xff1a;Mads Torgersen&#xff1a;我们认为这个场景是有用的 —— 您…

数据结构——图-有向图和无向图的邻接表基础

#include <stdio.h> #include <stdlib.h> #define VertexType char //顶点的数据类型&#xff08;char&#xff09; #define VertexMax 20 //最大顶点个数 typedef struct ArcNode//边表 {int adjvex;//存储的是该顶点在顶点数组即AdjList[]中的位置 struct ArcN…