前面已经分享了几种计算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