我无法理解以下内容:
考虑这个循环:
for (j=1;j<n;j++)
//j=1 will run once
//j<n will run n-1+1 = n times
//j++ will run n-1 times (one less than the conditional statement above)
现在考虑以下事项:
for (j=3;j<=n;j++)
//j=3 will run once
//j<=n will run n-3+2 = n-1 times
现在,我会说j ++将运行n-2次,但根据我的讲义,它将运行2(n-2)次。
我没有看到这有多大意义,例如,如果n = 5,循环将检查j <= n 4次,但只会增加3次。据说这会增加6倍?
答案 0 :(得分:1)
for (j=1;j<n;j++)
等同于(在C中)
j = 1;
while (j < n) {
...
j++;
}
尝试使用j
的较小值,例如2:j < 2
测试2次(n)和j++
一次(n-1)。
在第二种情况下
for (j=3;j<=n;j++)
对于n = 4
,j<=n
被测试3次(n-1),j++
2次(n-1)而不是2(n-2)。实际上你可以说只有当条件为真时才会执行j++
,即条件被测试的次数减一(假设循环没有中断之前,用C和其他类似语言)。
两个样本之间的差异为j<n
vs j<=n
:在C中,您可以翻译(对于整数比较)
j <= n
到
j < n+1
这可能有助于了解会发生什么。
答案 1 :(得分:0)
对于第一个例子(假设n> = 1),j<n
的计数应该只是n。
对于第二个例子(假设n> = 2),j<=n
的计数为n-1,j++
的计数为n-2。
你的理解是正确的,这在讲义中是错误的。