Python下 斐波拉契数列 的时间性能分析

没事的时候做了一个小小的测试,之前在看数据结构的时候,看到了斐波拉契数列数列的递归实现

突然想到python中也可用解包赋值实现,即多变量赋值。然后在又在python中实现递归算法,看看两者时间性能如何,纯属好奇。

首先在python中实现递归算法,只计算到10000即可。

def fibci(x1,x2):
    if x2<100000:
        return fibci(x2,x1+x2)

再实现非递归算法:

def fibci1(x1,x2):
    while x2<100000:
        x1,x2=x2,x1+x2

运行时间测试使用python再带的timeit包,精确度比较高。

from timeit import Timer
print 'Recursion:'.rjust(10),Timer('fibci(x1,x2)','from __main__ import fibci ;x1=0;x2=1').timeit()
print 'Python:'.rjust(10),Timer('fibci1(x1,x2)','from __main__ import fibci1 ;x1=0;x2=1').timeit()

timeit包中有个函数Timer,有两个参数,都是字符串,第一个参数是需要统计时间的代码,可以是一个函数,第二个是设置参数的值。最后再调用timeit(),该函数接收一个参数,及代码段计算的次数。默认情况是一百万。

所以上述代码相当于执行fibci和fibci1 一百万次。时间如下:

Recursion: 4.93287690618
   Python: 2.30019881601

可见,使用python的多变量复制,其效率要高许多。

posted @ 2013-01-09 15:45  理想空间  阅读(1053)  评论(0编辑  收藏  举报