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)
关键知识点敲黑板:
- 终止条件一定要明确:当
guess == target时,必须用return结束当前函数,不然即使猜对了,程序还会继续执行后面的递归调用,根本停不下来。 - 每次递归必须缩小范围:猜大了就把上限调低,猜小了就把下限调高——这样每次递归的范围都会越来越小,最终一定会触发终止条件,不会无限循环。
调试小技巧:
你可以在递归函数里加一行打印,比如print(f"当前范围:{low}~{high},猜测值:{guess}"),这样就能直观看到每次递归的范围是不是在缩小,快速定位问题出在哪。
内容的提问来源于stack exchange,提问作者Kendall
相关产品推荐
相关产品推荐

