今天学习算法的程序步计算计算时间复杂度的时候,这样一段程序的时间复杂度为2n + 3。(其中的count++就是指的程序步的个数)
float Sum(float list[], const int n) {
float tempsum = 0.0;
count++; // 针对赋值语句
for (i = 0; i < n; i++) {
count++; //针对for循环语句
tempsum += list[i];
count++; //赋值语句
}
count++; //针对for循环的最后一次执行
count++; // return语句
return tempsum;
}
在这里,我不是很清楚为什么代码倒数第三行会对for循环的最后一次执行做一次计数。
最后,我又去学习了下for循环,发现代码打的久了,竟然忘记最基本的东西了。
没错,就是for循环的表达式执行顺序。
假设有这样一段代码
for (表达式1, 表达式2, 表达式3){
内部嵌套语句...
}
执行顺序是:
- 计算
表达式1
- 计算
表达式2
, 若结果为true
,则进行第三步;若结果为false
,则跳至第五步 - 执行
内部嵌套语句
- 计算
表达式3
- 退出循环
quit the circle
也就是说,对于for(i = 0; i < n; i++)
这条语句来说,内部嵌套语句一共执行了n次,但是表达式2
也就是i < n
这个条件,一共判断了n+1次。
这里的程序步计算的时候,针对for循环的最后一次执行,说的就是这个判断语句
。