我无法弄清楚以下的for循环,它会执行多少次?在我看来,它永远不会停止运行,因为i
永远不会少于0.但我知道i
是一个int
,所以我对循环时很困惑即将结束。非常感谢你的帮助!
for (int i = n; i > 0; i = i/2) {
System.out.println(s);
}
也是复杂性log2(n)
?
答案 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
现在你应该能够理解为什么这个循环结束了。