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

如何解决Python骰子游戏运行时出现的最大递归深度超限错误

迷你骰子游戏RecursionError崩溃问题修复

问题原因

  • 递归深度超出Python限制:代码通过递归调用roll()实现重掷逻辑,Python默认递归深度上限为1000,当连续多次掷出无重复骰子结果时,调用栈层数超过上限就会触发RecursionError。
  • 逻辑设计缺陷:嵌套的check()函数中while循环未修改当前作用域的result变量,仅递归调用roll(),当前层级的循环永远不会退出,调用栈会持续累积不会释放,加速栈溢出发生。

修复方案

将递归逻辑替换为单层循环实现,从根本上避免栈溢出问题,优化后代码如下:

import random

def roll():
    # 所有无重复的5个骰子排序结果
    unique_results = [
        [1,2,3,4,5], [1,2,3,4,6], [1,2,3,5,6],
        [1,2,4,5,6], [1,3,4,5,6], [2,3,4,5,6]
    ]
    while True:
        result = sorted([random.randint(1,6) for _ in range(5)])
        if result not in unique_results:
            print(result)
            return

roll()

优化说明

  • 采用单层while循环实现重掷逻辑,所有操作在同一函数栈层级完成,不会出现调用栈溢出问题
  • 提前定义所有无重复的结果集,用in关键字判断替代冗长的多or条件,代码可读性和可维护性更高
  • 简化了冗余的嵌套函数定义,降低不必要的性能开销

内容的提问来源于stack exchange,提问作者Isaac Chew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:48:04