for循环的频率计数

时间:2013-03-20 07:53:21

标签: algorithm loops for-loop

我无法理解以下内容:

考虑这个循环:

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

2 个答案:

答案 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 = 4j<=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。

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