在各种语言中,谈到递归首当其冲的是斐波那契数列,太典型了,简直就是标杆
一开始本人在学习递归也是如此,因为太符合逻辑了
后台在工作和学习中,不断反思递归真的就好嘛?
首先递归需要从后往前推导,所有数据都要保存一遍~,如果是输入很大数字,如以前的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的时候,如下图:
很明显。。。在性能方面,推导式不合适