import time
from functools import wrapsdef recursion_timer(func):"""装饰器:用于统计递归函数的总执行时间"""# 闭包变量:跟踪是否已经开始计时和开始时间is_timing = Falsestart_time = 0.0@wraps(func)def wrapper(*args, **kwargs):nonlocal is_timing, start_time# 递归入口:第一次调用时开始计时if not is_timing:is_timing = Truestart_time = time.perf_counter() # 使用高精度计时器# 执行递归函数result = func(*args, **kwargs)# 递归出口:最后一次返回时结束计时if is_timing:is_timing = Falseend_time = time.perf_counter()total_time = end_time - start_timeprint(f"递归函数 {func.__name__} 总执行时间: {total_time:.6f} 秒")return resultreturn wrapper# 示例1:计算阶乘的递归函数
@recursion_timer
def factorial(n):if n <= 1:return 1return n * factorial(n - 1)# 示例2:计算斐波那契数列的递归函数
@recursion_timer
def fibonacci(n):if n <= 1:return nreturn fibonacci(n - 1) + fibonacci(n - 2)# 测试
if __name__ == "__main__":print("计算 5! 的结果:", factorial(5))print("计算斐波那契数列第 10 项:", fibonacci(10))