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

求含递增变量累加操作的while循环的时间复杂度

循环时间复杂度推导与结论

首先给出待分析的代码:

int i=1,s=1;
while (s<=n)
    i++
    s+=i;
    print("*")

当n=10时,循环运行4次,手动验证过程如下:

  • 初始状态:i=1,s=1
  • 第1次循环:i变为2,s=1+2=3,打印*(s=3≤10,继续)
  • 第2次循环:i变为3,s=3+3=6,打印*(s=6≤10,继续)
  • 第3次循环:i变为4,s=6+4=10,打印*(s=10≤10,继续)
  • 第4次循环:i变为5,s=10+5=15,打印*(s=15>10,循环终止)

推导过程

我们需要找到循环运行次数k与n的数学关系:

  1. 观察s的变化规律:每次循环中i递增1,s累加当前i值。初始s=1,第k次循环执行前,s的值是1+2+3+...+k(第1次循环前s=1,第2次前s=1+2,以此类推)。
  2. 循环终止条件是s > n,因此循环运行k次的核心条件为:

    1+2+...+k ≤ n < 1+2+...+(k+1)

  3. 代入等差数列求和公式1+2+...+k = k(k+1)/2,得到不等式:
    $$\frac{k(k+1)}{2} \leq n < \frac{(k+1)(k+2)}{2}$$
  4. 当n趋近于无穷大时,低阶项和常数项可忽略,不等式近似为:
    $$\frac{k^2}{2} \approx n$$
    解得:
    $$k \approx \sqrt{2n}$$

结论

该循环的时间复杂度为O(√n)(平方根阶),而非推测的O(log₂n)。循环运行次数与n的平方根成正比,增长速度慢于线性阶,但快于对数阶。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:15:43