2017计算机硕士统考选择题 - 求时间复杂度

题干:
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 因此它的时间复杂度是O(√n)。

你可能感兴趣的:(算法,数据结构)