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

Python 3.12.5设置递归上限仍报RecursionError,求F(n)计算方案

解决递归深度问题的方案

方案一:数学化简表达式(最优)

根据F(n)的递推公式:

F(n) = n*(n-1) + F(n-1) + F(n-2) (n>2)

我们可以逐步展开并化简目标表达式:

  1. 替换F(2024):
    F(2024) = 2024*2023 + F(2023) + F(2022)
  2. 替换F(2023):
    F(2023) = 2023*2022 + F(2022) + F(2021)
  3. 将F(2023)代入F(2024)的表达式,再代入目标式:
    F(2024)-F(2022)-2*F(2021)-F(2020)
    = [2024*2023 + 2023*2022 + F(2022)+F(2021)+F(2022)] - F(2022) -2*F(2021) -F(2020)
    = 2023*(2024+2022) + F(2022) - F(2021) - F(2020)
    
  4. 利用递推公式的变形 F(k) - F(k-1) - F(k-2) = k*(k-1)(k=2022),可得:
    F(2022)-F(2021)-F(2020) = 2022*2021
  5. 最终化简计算:
    原式 = 2023*(2024+2022) + 2022*2021
    = 2023*2*2023 + 2022*2021
    = 3*2023*2022 + 2
    = 12271520
    

直接计算这个结果即可,无需调用任何函数。

方案二:迭代法计算F(n)(避免递归栈问题)

如果不想做数学化简,可以用迭代代替递归,从基础值开始逐步计算到目标项,代码如下:

def compute_F(n):
    if n == 1:
        return 1
    if n == 2:
        return 2
    a, b = 1, 2  # a=F(1), b=F(2)
    for k in range(3, n+1):
        c = k*(k-1) + a + b
        a, b = b, c
    return b

# 计算目标表达式
result = compute_F(2024) - compute_F(2022) - 2*compute_F(2021) - compute_F(2020)
print(result)

这个方法时间复杂度为O(n),空间复杂度为O(1),不会触发递归深度错误,运行速度远快于递归版本。

方案三:调整递归栈参数(不推荐)

如果坚持用递归,除了设置sys.setrecursionlimit,还可以尝试:

  • 确认本地Python环境的递归栈限制确实能支持2024层(理论上2024远小于50000000,但部分环境可能存在隐性限制)
  • 手动模拟尾递归逻辑(Python原生不支持尾递归优化,实用性较低)

显然前两种方案更可靠,尤其是数学化简方案,直接一步得到结果,效率最高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 18:55:11