我找不到以下for循環,它將執行多少次?在我看來,它永遠不會停止運行,因爲i
將永遠不會小於0.但我知道i
是int
,所以我很困惑什麼時候循環會停止。非常感謝您的幫助!for循環的迭代次數
for (int i = n; i > 0; i = i/2) {
System.out.println(s);
}
也是複雜性log2(n)
?
我找不到以下for循環,它將執行多少次?在我看來,它永遠不會停止運行,因爲i
將永遠不會小於0.但我知道i
是int
,所以我很困惑什麼時候循環會停止。非常感謝您的幫助!for循環的迭代次數
for (int i = n; i > 0; i = i/2) {
System.out.println(s);
}
也是複雜性log2(n)
?
這取決於。
對於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個元素。
它會運行多次迭代,由log2(n)給出,最後一個是當i = 1時。當下一次檢查條件時,i = 1/2(int),其計算爲零並違反條件並退出循環。所以它取決於的值n。
只需修改你的代碼一點點,看看會發生什麼情況有:
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
現在,你應該能夠明白爲什麼這個循環結束。
你試過嗎? – Keppil
你的意思是迭代,而不是刺激:) – SoulRayder
這是一個惱人的循環。 – user93353