前面已经分享了几种计算Fibonacci数列第n项的方法,详见Python快速计算Fibonacci数列中第n项的方法和三种Fibonacci数列第n项计算方法及其优劣分析,本文分享第7种(过几天分享第8种),主要演示列表的append()和pop()这两个方法和反向索引的用法。如果n小的话,可以只append()不pop()(注意,这样的话append()的参数要改为data[-1]+data[-2]),但是如果n很大的话会导致内存崩溃。
下面的代码使用第800万项对本文的第7种方法和前面6种中最快的方法3进行了测试和对比,事实证明,算法3是无敌的,也是最简单的。
大家不妨分析一下,本文的方法7比方法3慢的原因是什么?
from time import time
def fibo3(n):
a, b = 1, 1
for i in range(2, n+1):
a, b = b, a+b
return a
def fibo7(n):
data = [1, 1]
for _ in range(2, n):
data.append(sum(data))
data.pop(0)
return data[-1]
n = 8000000
for fibo in (fibo3, fibo7):
start = time()
r = str(fibo(n))
print(fibo.__name__,
len(r),
sep=':',
end=':')
print(time()-start)
运行结果:
fibo3:1671901:619.382312297821
fibo7:1671901:1148.716125011444