Python中如何自定义字典缓存优化Collatz序列递归函数?
问题排查
原代码存在以下核心错误:
- 缩进不规范:
collatz_up_to_n函数中for循环下属的执行语句没有缩进,不符合Python语法要求 - 返回值不统一:当输入n为1时函数返回单个列表,其他分支返回三个值,调用时会抛出类型匹配错误
- 逻辑判断无效:
if n in a_list == collatz_up_to_n(n)语句逻辑完全错误,还会递归调用外层函数触发死循环 - 变量未定义:
values、valuesOdd仅在if分支中声明,走else分支时返回会触发变量未定义错误 - 未实现缓存逻辑:完全没有按照要求用字典存储已计算的序列结果,没有复用逻辑
- 死代码:
return语句后的print(n)永远不会执行
修正后的实现
我们单独定义全局缓存字典存储已计算结果,调用时优先查缓存避免重复计算,完全不用lru_cache:
# 自定义缓存字典,键为输入数字,值为对应Collatz序列 collatz_cache = {} def better_collatz(n): # 命中缓存直接返回结果 if n in collatz_cache: return collatz_cache[n] # 递归终止条件 if n == 1: res = [1] elif n % 2 == 0: res = [n] + better_collatz(n // 2) else: res = [n] + better_collatz(n * 3 + 1) # 新计算的结果存入缓存 collatz_cache[n] = res return res def collatz_up_to_n(n): for i in range(1, n+1): seq = better_collatz(i) print(' '.join(map(str, seq))) # 测试调用 print("The Collatz sequence up to 10 is: ") collatz_up_to_n(10)
效果说明
运行后会依次输出1到10每个数字的完整Collatz序列,已经计算过的数值会直接从缓存读取,大幅降低递归次数,符合效率提升要求。
内容的提问来源于stack exchange,提问作者Shri
相关产品推荐
相关产品推荐

