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

Python含if语句的递归代码触发无限递归报RecursionError求助

错误原因分析
  • Python解释器默认限制了最大递归深度,通常为1000层左右,目的是防止无限递归导致调用栈溢出崩溃。你的代码仅在用户输入为y时才会终止递归,没有其他退出逻辑,只要用户连续输入非y的内容,递归调用层数就会持续上涨,突破上限后就会抛出RecursionError。
  • 递归逻辑本身缺少边界限制,无限递归的代码无论怎么调整递归深度,最终都必然会触发报错,属于逻辑设计缺陷。
修复方案

方案1:改用循环实现(最优方案)

循环逻辑不会产生额外的调用栈,不存在深度限制,可以无限等待用户输入符合要求的内容:

def get_girlfriend():
    while True:
        res = input("Will you go out with me? ")
        if res == "y":
            print("We've done it bois")
            return

方案2:增加递归退出边界

给递归添加最大尝试次数限制,达到次数后自动终止,避免无限递归:

# max_try参数可自定义最大尝试次数
def get_girlfriend(try_count: int = 0, max_try: int = 500):
    if try_count >= max_try:
        print("尝试次数已达上限,放弃了")
        return
    res = input("Will you go out with me? ")
    if res == "y":
        print("We've done it bois")
        return
    get_girlfriend(try_count + 1, max_try)

方案3:手动调整递归深度(仅临时测试用,不推荐生产环境使用)

通过修改Python解释器的递归深度限制提升上限,但只要用户拒绝次数足够多,仍然会触发报错:

import sys
# 将递归深度上限调整为10000,可根据需求修改
sys.setrecursionlimit(10000)

def get_girlfriend():
    res = input("Will you go out with me? ")
    if res == "y":
        print("We've done it bois")
        return
    get_girlfriend()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:24:05