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

递归时间复杂度分析求助:含循环的递归函数复杂度推导

递归与循环混合函数的时间复杂度分析

递归式推导与复杂度结论

你推导的递归式完全正确:
T(n) = n·T(n-1) + c
其中c是执行console.log(n)及循环初始化的常数开销,T(0)为base case的常数开销。

展开递归式可得:

T(n) = n·T(n-1) + c
     = n·[(n-1)·T(n-2) + c] + c = n(n-1)T(n-2) + nc + c
     = ...
     = n!·T(0) + c·(1 + n + n(n-1) + ... + n!)

求和项的近似分析

观察求和部分S(n) = 1 + n + n(n-1) + ... + n!,可改写为:
S(n) = n!·(1/n! + 1/(n-1)! + ... + 1/0!)
自然常数e的泰勒展开为e = Σ_{k=0}^∞ 1/k!,因此Σ_{k=0}^n 1/k!是e的前n+1项近似,其值小于e(约2.718)。由此可得:
S(n) < e·n!
这说明S(n)的主导项是n!,其他项的增长速度远慢于n!,因此整个递归式的时间复杂度为O(n!)。

常见错误结论的纠正

  • ChatGPT给出的O(2^n)明显错误:2^n的增长速度远慢于n!(例如n=10时,2^10=1024,10!=3628800),完全无法匹配函数的实际执行次数。
  • 原出处的O(n^n)也不正确:n^n的增长速度远快于n!(例如n=10时,10^10=10^10,远大于10!),属于过度高估。

移除console.log(n)后的复杂度变化

移除console.log(n)后,递归式变为T(n) = n·T(n-1) + c',其中c'是仅执行循环的常数开销。递归式的核心结构未发生变化,展开后的主导项依然是n!,因此时间复杂度仍为O(n!)——常数级别的开销变化不影响渐进复杂度的结论。

内容的提问来源于stack exchange,提问作者Лука

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 09:12:44