2

我无法理解以下内容:

考虑这个循环:

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倍?

4

2 回答 2

2
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<nvs j<=n:在 C 中,您可以翻译(用于整数比较)

j <= n

j < n+1

这可能有助于理解发生了什么。

于 2013-03-20T08:06:22.197 回答
0

对于第一个示例(假设 n >= 1),计数j<n应该只是 n。

对于第二个示例(假设 n >= 2),计数为j<=nn-1 和j++n-2。

你的理解是正确的,这在讲义中是错误的。

于 2013-03-20T08:05:50.763 回答