我想知道2段代码会执行多少次。它们都是n次,或者其中一个是n + 1?
int sum=0;
for (int i = 1; i <= n; i++)
sum = sum + i;
AND
int sum=0;
for (int i = 1; i <= n; ++i)
sum = sum + i;
有人帮我吗?
修改 Sınce我收到了这么多,评论不好。我决定真实地提出这个问题。
int sum = 0;
for (int i = 1; i <= n; ++i)
sum = sum + f1(i, n);}
int f1(int x, int n) {
int sum = 0;
for (int i = 1; i <= n; i++)
sum = sum + i;
return (x + sum); }
此代码段的确切复杂性为O(n *(n + 1)),我想了解为什么有(n + 1)而不是o(n * n)
答案 0 :(得分:1)
使用哪一个并不重要,程序输出将是相同的; i++
和++i
不是for
循环中的终止条件,而是在每次迭代结束时评估的语句。
但请注意++i
永远不会慢于i++
;从概念上讲,必须为后者采用对象副本。一个好的编译器会优化副本。
风格点:请缩进sum = sum + i;
行;否则很难读。
答案 1 :(得分:0)
我认为代码的代码复杂度是O(n ^ 2)。关于n + 1的复杂循环并不重要。 O(n + 1)= O(n-1)= O(n)所以都是相同的,复杂性可以说是n ^ 2.