python斐波那契数列递归算法的时间复杂度推导_python之斐波那契数列递归推导在性能方面的反思...

在各种语言中,谈到递归首当其冲的是斐波那契数列,太典型了,简直就是标杆

一开始本人在学习递归也是如此,因为太符合逻辑了

后台在工作和学习中,不断反思递归真的就好嘛?

首先递归需要从后往前推导,所有数据都要保存一遍~,如果是输入很大数字,如以前的1M内存可能不够把??

我们暂且不谈过去,毕竟是过去,现在即使手机的内存都动辄3G、4G,哪能不够

斐波那契数列典型代码如下:

def fib1(x):

if x == 1:

return 1

elif x == 2:

return 1

elif x > 2:

return fib1(x - 1) + fib1(x - 2)

else:

return 0

如果算100以内还是比较快的,如果算10000明显比较慢

换个思路,如果我们不使用推导,而是正常的向下计算,速度是不是很快?

代码如下:

def fib2(x):

if x == 1:

return 1

elif x == 2:

return 1

elif x > 2:

x1 = 1

x2 = 1

result = 0

for i in range(3,x + 1):

result = x1 + x2

x1,x2 = x2,result

return result

else:

return 0

在pycharm中分别计算俩个的运行速度发现,推导式很慢:

上面是执行fib1(30)的结果,下面是执行fib2(30)的结果,当计算35的时候,如下图:

很明显。。。在性能方面,推导式不合适

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值