for循环的迭代次数

时间:2014-04-02 09:17:22

标签: java for-loop complexity-theory

我无法弄清楚以下的for循环,它会执行多少次?在我看来,它永远不会停止运行,因为i永远不会少于0.但我知道i是一个int,所以我对循环时很困惑即将结束。非常感谢你的帮助!

for (int i = n; i > 0; i = i/2) {
    System.out.println(s);
}

也是复杂性log2(n)

3 个答案:

答案 0 :(得分:0)

取决于。

对于n <= 0,它永远不会在里面。

对于n > 0,它将执行log2(n) + 1


n = 8

i = 8, 4, 2, 1将调用它,最后3 + 1 = log2(8) + 1


它也适用于@Keppil测试:

30 < log2(2147483648 - 1) < 31

,结果集有31个元素。

答案 1 :(得分:0)

它将运行多次迭代,由 log2(n)给出,最后一次是在i = 1时。当下次检查条件时,i = 1/2 in int,其计算结果为零并违反条件并退出循环。所以它取决于 n 的值。

答案 2 :(得分:0)

只需稍微修改你的代码,看看那里发生了什么:

int n = 50;
for (int i=n; i>0; i=i/2){
    System.out.println("i: " + i);
}
System.out.println("1/2 in Java is: " + 1/2);

输出结果为:

i: 50
i: 25
i: 12
i: 6
i: 3
i: 1
1/2 in java is: 0

现在你应该能够理解为什么这个循环结束了。