普通递归实现:
def fib(N):
if N == 0:
return 1
if N == 1:
return 1
if N > 1:
return fib(N-1) + fib(N-2)
import time
t1 = time.time()
print(fib(40))
t2 = time.time()
print(t2-t1)
#运行结果为
165580141
53.53498697280884
上方时间花费在求重复的值上,例如fib(40)=fib(39)+fib(38),fib(39)=fib(38)+fib(37)这里fib(38)就会被求两次,fib(37),fib(36)...也是。
如果在这儿加入缓存,将每次求出来的结果保存到数组,就会节省大部分时间。实现如下。
缓存机制求斐波那契:
def fib(N):
if N == 0:
return 1
if N == 1:
return 1
arr = [1 for i in range(N+1)]
for i in range(2, N+1):
arr[i] = arr[i-1] + arr[i-2]
return arr[N]
import time
t1 = time.time()
print(fib(40))
t2 = time.time()
print(t2-t1)
#运行结果:
165580141
0.00018906593322753906
由图可知,时间从53秒优化到8毫秒。
优化斐波那契数列计算
本文对比了普通递归和使用缓存机制求解斐波那契数列的效率,通过加入缓存避免重复计算,将计算时间从53秒优化到仅8毫秒。
5266

被折叠的 条评论
为什么被折叠?



