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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:27:03