该程序段的主要部分是一个循环,其循环条件是 s < n
。在每次循环中,变量 i
和 s
都被更新:i
自增 1,s
加上 i
的当前值。
要计算这个程序段的时间复杂度,我们可以关注循环执行的次数。由于每次循环 i
增 1,并加入到 s
中,这意味着 s
最终将是前 n
个自然数的和(实际上要多一个 i
的初始值)。
求解这样的循环至退出的条件,我们可以写出:
[ s = \frac{n(n + 1)}{2} ]
约等于 ( n^2/2 )(因为 ( 1/2 < 1 )),表示如果要求 s
大于或等于 n
,则实际上 n
会与平方级别的范围相关。
我们再来看循环的次数,可以看出循环迭代了一个类似等差数列的求和过程。根据等差数列的求和公式,整个过程涉及 n
次迭代,其中 i
从 0
变化到 n-1
以满足条件 s < n
。因此,这个程序段的执行时间和迭代次数都与原始输入 n
成正比,所以时间复杂度是 ( O(n) )。