python实现斐波那契数列的算法优化
斐波那契数列的具体实现原理就不需要再阐述了,就是具体的第n项等于前两项之和,其中第0项为0,第一项为1.当然你也看成从第一项开始,第一项和第二项都是1的数列。
所以我们最基本是算法就是一个递归就可以了。
def feb1(n):
if 2 > n:
return n
else:
return feb1(n - 1) + feb1(n - 2)
但是留心的同学可以发现当我们的项数比较大的时候,他的耗时非常大,电脑卡死也算不出来。这是因为这是一个算法效率极低的算法;因为在每一次递归的时候都是从第1项开始计算到第n-1项。存在非常多的代码重复。改进的思路就是对之前已经计算过的结果进行记忆。减少代码重复,这时候代码复杂度就从O(2^n)变成了O(n),大大提高了效率。
def feb2(n):
now = 1
last = 0
while n > 1:
now = last + now
last = now - last
n=n-1
return now
这里可以计算一下耗时,你会发现,使用出现几个数量级的差异。n=50的时候,我已经无法等他计算了。而优化算法只需要10-5的时间。
import time
t1 =time.perf_counter()
print(feb1(50))
t2=time.perf_counter()
print(feb2(50))
t3=time.perf_counter()
print("time1:{}".format(t2-t1))
print("time2:{}".format(t3-t2))
感谢你的观看,欢迎讨论