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的时候,如下图:
很明显。。。在性能方面,推导式不合适
关于本篇内容如有转载请注明出处;技术内容的探讨、纠错,请发邮件到70907583@qq.com