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的时候,如下图:

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

猜你喜欢

转载自www.cnblogs.com/watertaro/p/9276417.html