2014-04-02 196 views
-2

我找不到以下for循環,它將執行多少次?在我看來,它永遠不會停止運行,因爲i將永遠不會小於0.但我知道iint,所以我很困惑什麼時候循環會停止。非常感謝您的幫助!for循環的迭代次數

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

也是複雜性log2(n)

+0

你試過嗎? – Keppil

+1

你的意思是迭代,而不是刺激:) – SoulRayder

+0

這是一個惱人的循環。 – user93353

回答

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個元素。

0

它會運行多次迭代,由log2(n)給出,最後一個是當i = 1時。當下一次檢查條件時,i = 1/2(int),其計算爲零並違反條件並退出循環。所以它取決於的值n

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 

現在,你應該能夠明白爲什麼這個循環結束。