时间装置器可以直观看出算法运行时间的快慢
## 时间装置器
import time
def cal_time(func):
def wrapper(*args,**kwargs):
t1 = time.time()
result = func(*args,**kwargs)
t2 = time.time()
print("%s running time: %s secs." %(func.__name__,t2 - t1))
return result
return wrapper
## 时间装置器的调用
def fib(n):
if n == 1 or n == 2:
return 1
else:
return fib(n-1) + fib(n-2)
@cal_time # 递归调用装置器时,把递归函数包裹在另一个函数中
def c(n):
return fib(n)
print(c(20))
@cal_time
# 非递归思想,动态规划(DP)思想 = 递推式(问题的求解需要前一个问题求解出来) + 重复子问题(将子问题进行事先存储)
def fib_no_rec(n):
li = [0,1,1] # 按照以n为下标进行存放在数组中
if n > 2:
for i in range(n-2): # 重复循环添加n-2次
num = li[-1] + li[-2] # 取数组后两项相加
li.append(num)
return li[n] # 返回求的第n项
print(fib_no_rec(20))
运行结果为: