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

StackOverflow新手求助:递归猜数字程序陷入无限循环问题

搞定递归猜数字的无限循环问题!

嘿,作为递归新手踩这个坑太正常啦!你遇到的maximum recursion depth exceeded in comparison报错,本质就是程序陷入了无限递归——函数一直在自己调用自己,从来没停下来,直到超出Python默认的递归深度限制。

问题大概率出在这两个地方:

  • 没写对递归终止条件:比如电脑猜对数字后,没有让函数停止,反而继续执行递归调用;
  • 每次递归没缩小猜测范围:也就是调用递归函数时,没有更新上限或下限,导致每次猜的范围都一样,永远碰不到终止条件。

给你一个能正常运行的递归版本参考:

import random

def guess_number(low, high, target):
    # 先处理异常情况:如果范围无效,直接结束
    if low > high:
        print("哇哦,你的数字好像不在给定范围里哎!")
        return
    
    # 生成当前范围内的随机猜测值(也可以用二分法取中间值,效率更高)
    guess = random.randint(low, high)
    print(f"我猜是 {guess}!")
    
    # 核心判断逻辑 + 递归控制
    if guess == target:
        print("耶!终于猜对啦🥳")
        return  # 猜对就终止递归,别再往下跑了!
    elif guess > target:
        print("哦吼,猜大了!")
        # 递归调用:把上限改成猜的数字-1,缩小范围
        guess_number(low, guess - 1, target)
    else:
        print("哎呀,猜小了!")
        # 递归调用:把下限改成猜的数字+1,缩小范围
        guess_number(guess + 1, high, target)

# 主程序获取用户输入
if __name__ == "__main__":
    target = int(input("请输入你想让我猜的数字:"))
    low = int(input("请输入范围下限:"))
    high = int(input("请输入范围上限:"))
    guess_number(low, high, target)

关键知识点敲黑板:

  1. 终止条件一定要明确:当guess == target时,必须用return结束当前函数,不然即使猜对了,程序还会继续执行后面的递归调用,根本停不下来。
  2. 每次递归必须缩小范围:猜大了就把上限调低,猜小了就把下限调高——这样每次递归的范围都会越来越小,最终一定会触发终止条件,不会无限循环。

调试小技巧:

你可以在递归函数里加一行打印,比如print(f"当前范围:{low}~{high},猜测值:{guess}"),这样就能直观看到每次递归的范围是不是在缩小,快速定位问题出在哪。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:57:18