最近,我开始学习计数原始操作,从而估计程序的运行时间。但是,我在计算 for 循环的操作时发现了问题。说,for (int i=1; i<n; i++)
就个人而言,我认为(i = 1)
1 次,(i < n)
n 次,i++
次n-1
,因此2n
总共次。但是,有人告诉我,i++
for times 只计算整个运行n-1
的多少次。等于,我应该数次。i++
i++
i=i+1
2(n-1)
i++
计算两次是否正确?++
代表一个方法还是一个运算符?
在这段代码中:
for (int i=1; i<n; i++)
增量块,这里是,i++
在每次迭代结束时执行,所以它执行了 n-1 次。在第 (n-1) 次,终止条件为假,循环终止。
1: 你的循环是 n-1 次。这是因为它将为所有“i”运行:
[ 1, n ) == [ 1, n-1 ]
2: ++ 是运算符
让我们以不同的方式考虑 forloop:
for(A,B,C)
也可以写成
A;
while(B){
...
C;
}
所以 A 是一次性初始化,在循环运行之前完成
B为条件,只要条件成立,循环继续
C 在每次迭代后完成,例如递增一个计数器,i++
在您的示例中,循环将运行 n-1 次 i 初始化为 1 在每个循环运行后递增 i
到第二部分:
++
是一个运算符,不等于i=i+1;
i
是递增的,但它返回原来的i
,而不是递增的
++i
确实等于i=i+1
for (int i=1; i<n; i++)
在这个块中,每次迭代都会调用 i++,并且这个代码块的检查语句是i<n
一部分。所以它被执行 n 次,第 n 次它没有通过检查语句并终止
i++
在java中称为一元运算符。但是你应该数两次。因为它-首先制作和添加-然后分配。
i++ 等于 i = i+1 所以
计算 i+1
将结果设置为 i
总共 2 步,但 2 只是一个常数,所以如果您使用大 O / Omega 表示法,这无关紧要