时间装置器

发布时间 2023-11-06 16:38:30作者: byyya

时间装置器可以直观看出算法运行时间的快慢

## 时间装置器
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))

运行结果为:
image