该算法的时间复杂度分析过程

void func(int n) {
int i=0,s=0;
while (s<=n) { s=s+i; i++; }}

i=0,s=0, i=1,s=1
i=1,s=1, i=2,s=1+2
i=2,s=1+2, i=3,s=1+2+3
如果循环执行m次,则有:1+2+3.......+m+k=n(其中k为常数,用作不缺),1+2+3+....m的递推式为s=m(m+1)/2.
求递推式要用到:等差数列求和:s=na+dn(n-1)/2,其中a为首项,d为公差
求n公式:△=b^2-4ac
最后解得:T(n)=O(√n) ,要把n的系数变为1
因此时间复杂度o(根号n)

假设运行次数为p,s=(1+p)*p/2,即p=O(s^1/2),故时间复杂度为0(n^1/2),即根号n级别复杂度

其实就是计算循环次数与n的关系
这里有2个变量,s和i,n不算变量,可以看做常量
其中i每次循环+1
s每次循环+i
所以是0,1,3,6,10,15这样加上去的
至于怎么把数列变成通项,那是个数学问题,就不是三言两语能说清楚的了

O(n)

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632