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

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

 

posted @ 2018-07-07 09:43  水里的芋头  阅读(271)  评论(0编辑  收藏  举报