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

递归函数G(n)运行时间递推关系式求解及错误排查

分析递归函数G(n)的时间递推式错误原因及正确解法

嘿,我来帮你理清这个问题——你之前的递推式出错的核心原因,是没注意到循环的执行次数对递归调用的影响!我们先一步步拆解函数的执行流程,再推导正确的递推式。

首先把原函数的代码清晰展示出来:

function G(n):
    if n>0 then:
        x=0
        for i = 1 to n:
            x = x + 1
            G(n-1)
    end if

你的错误点分析

你之前写出的递推式 T(n) = T(n-1) + 1,相当于默认循环只执行了一次、只调用了一次G(n-1),但实际上这个for循环是从i=1到i=n,会完整执行n次,每一次循环里都会触发一次G(n-1)的调用。这才是问题的关键!

正确的递推式推导

我们定义T(n)为函数G(n)的运行时间,分情况讨论:

  • 当n ≤ 0时,函数直接跳过循环和递归逻辑,运行时间是常数级的,所以:
    T(n) = Θ(1)(或者简化写成T(n) = c,其中c是一个固定常数)
  • 当n > 0时,函数的执行分为几部分:
    1. 初始化x=0:这是常数时间操作,记为Θ(1)
    2. 执行n次循环,每次循环包含两个操作:
      • x = x + 1:常数时间Θ(1)
      • 调用G(n-1):运行时间为T(n-1)
        把这些加起来,总运行时间就是:
        T(n) = Θ(1) + n*(Θ(1) + T(n-1))
        我们可以把常数项合并简化,最终递推式可以写成:
        T(n) = n*T(n-1) + Θ(n)

如果我们把所有常数操作都近似为1(方便计算具体数值),递推式也可以写成:
T(n) = n*T(n-1) + n(初始化的1 + n次循环里每次的1,总共n+1,合并为n不影响渐近趋势)

小例子验证

比如拿n=1来验证:

  • G(1)执行流程:初始化x(1步)→ 循环1次:x+1(1步)+ G(0)(1步),总步数是3
  • 用递推式计算:T(1)=1*T(0)+1=1*1+1=2?这里的差异是因为常数项的计数粒度,但核心的n*T(n-1)是正确的,渐近复杂度的推导不受这个小差异影响。

再看n=2:

  • 实际执行总步数:初始化x(1)→ 循环i=1:x+1(1)+G(1)(3)→ 循环i=2:x+1(1)+G(1)(3),总步数9
  • 递推式计算:T(2)=2*T(1)+2=2*3+2=8,同样是常数项的计数问题,但整体的增长趋势完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:33:25