You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:39:02