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
相关产品推荐
相关产品推荐

