Python递归求幂函数触发调用上限报错,仅调用两次出错原因咨询
问题原因分析
你的递归函数缺少终止递归的基准条件,逻辑上会进入无限递归:
调用power(2,2)的实际执行链路是:
power(2,2)→ 返回2 * power(2,1)power(2,1)→ 返回2 * power(2,0)power(2,0)→ 返回2 * power(2,-1)- 以此类推,参数
p会一直减小到负数,永远不会停止递归,直到嵌套层数超过Python的递归深度限制,就会触发你看到的错误。
你原注释说明函数仅支持正整数参数,只需要补充p=1的基准终止条件即可正常运行,修正后的代码如下:
def power(n,p): "Return n to the power of p. Only works for positive integers" # 补充基准条件,递归到p=1时直接返回n,停止递归 if p == 1: return n return n * power(n,p-1) if __name__=="__main__": print(power(2,2)) # 输出4
递归最大深度说明
递归最大深度确实代表递归函数的嵌套调用次数存在上限:
- Python默认设置递归深度限制(通常为1000左右),目的是防止无限递归耗尽调用栈内存,导致程序直接崩溃。
- 你可以通过
sys模块的sys.getrecursionlimit()查看当前环境的递归深度上限,也可以用sys.setrecursionlimit(自定义数值)修改上限,但不推荐随意调整,过高的递归深度很容易触发栈溢出问题。 - 超过1000层的递归逻辑更推荐改写成迭代实现,兼容性和稳定性都更好。
内容的提问来源于stack exchange,提问作者Mohammad
相关产品推荐
相关产品推荐

