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

含while与for循环的算法时间复杂度计算咨询

代码时间复杂度分析

首先咱们先把你给出的代码整理成更清晰的格式:

function(a)
    n = length(a)
    i = 1
    while i <= n
        for j = n to i+1
            print(a)
        i = i + 5

接下来咱们一步步拆解复杂度:

1. While循环的执行次数

你说的没错,i从1开始,每次加5,直到i > n才停止。当n足够大时,循环次数约为n/5,也就是**O(n)**级别的线性次数(常数系数在复杂度分析里可以忽略,但咱们计算实际次数时会用到)。

2. For循环的执行次数(关键!)

这里你疑惑的点很正常,但for循环的次数并不是固定的n/5——它的次数会随着i的增大而减少,咱们得把每一轮while循环里的for次数加起来计算总和:

  • 第一次while循环:i=1,for循环的j从n到2,执行次数是n - 1次
  • 第二次while循环:i=6,for循环的j从n到7,执行次数是n - 6次
  • 第三次while循环:i=11,执行次数是n - 11次
  • ...
  • 最后一轮while循环:i的取值是1 + 5*(k-1)(k是while总次数),执行次数是n - (1 + 5*(k-1))次

这是一个等差数列求和的问题:首项为n-1,末项为n - (1 +5*(k-1)),项数k≈n/5。代入等差数列求和公式:

总和 = k * (首项 + 末项) / 2

把k≈n/5代入后化简,最终的总执行次数约为n²/10——这是一个二次方级别的复杂度,也就是O(n²)。

总结

虽然while循环是线性次数,但每轮里的for循环次数累加起来是二次方规模,所以这段代码的整体时间复杂度是O(n²)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:36:05