题干:
2017统考第一道选择题
已知一段代码如下,分析它的时间复杂度:
int func(int n){
int sum=0,i=0;
while (sum
解析:代码块循环体内容 => i = i + 1,sum = sum + i.结果如下,
1 = 0 + 1
3 = 1 + 2
6 = 3 + 3
10 = 6 + 4
15 = 10 + 5
…
sum(x) = sum(x-1) + x
x是循环次数,利用递归的思路写出它的算法如下:
int SUM(int x){
if (n == 1)
return 1;
return SUM(x-1) + x;
}
这个算法可得sum = x + (x-1) + (x-2) + …+1 = x(x+1)/2,x是循环次数
令x(x+1)/2