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的多变量复制,其效率要高许多。