运行简单Python递归程序时触发RecursionError报错该如何解决
问题原因
你编写的递归阶乘函数缺少递归终止条件:函数每次执行都会调用factorial(n-1),参数n会持续递减至负数,没有触发停止返回的节点,直到超过Python默认的递归深度限制(默认约1000层),就会抛出RecursionError报错。
解决方案
方案1:补充递归终止条件
阶乘的数学定义中0! = 1、1! = 1,只需要补充终止判断即可正常运行:
def factorial(n): # 递归终止条件 if n <= 1: return 1 return n * factorial(n-1) num = 7 print(factorial(num)) # 运行输出结果为5040
如果需要兼容非法输入场景,可以额外补充参数校验:
def factorial(n): if not isinstance(n, int) or n < 0: raise ValueError("阶乘仅支持计算非负整数") if n <= 1: return 1 return n * factorial(n-1)
方案2:改用非递归实现(规避递归深度限制)
如果需要计算数值较大的阶乘,避免触发递归深度限制,可以改用循环实现:
def factorial(n): res = 1 for i in range(2, n+1): res *= i return res num = 7 print(factorial(num))
内容的提问来源于stack exchange,提问作者Lalit rathore
相关产品推荐
相关产品推荐

