請比較下面兩個FOR循環的優缺點
1.for(i=1;i<N;i++)
{
if(condition)
dosomething();
else
dootherthing();
}
2.if(condition)
{
for (i=1;i<N;i++)
dosomething()
}
else
{
for (i=1;i<N;i++)
dootherthing()
}
解答:
其實這2段代碼的效率問題是差不多的,因爲要判斷一個表達式的真假,幾乎不需要時間,重要的是:
前者:
優點:條件判斷出現在For裏面,意味着,即使我在dosomething()或dootherthing()這2個函數中改變了condition的值,For循環也能正確執行我的意圖,因爲它在每次循環中都會重新檢測conditon的值並針對condition的值做不同動作,所謂以不變應萬變,這是難能可貴的.
缺點:如果condition一直未曾改變,我們可憐的if必須每次循環都判斷一下condition的真假.犧牲了運行時效率.
後者:
優點:只進行一次判斷,運行時效率高.適合那種condition的值不會改變的情況.
缺點:由於只在一開始進行一次判斷,所以失去的改變condition的值的機會,也就是說,即使我在dosomething()中改變了condition的值爲false,這個程序也不會改變它的判斷,它依然執行着dosomething()的循環.我們不能隨時更換我們需要進行的動作。這是犧牲了彈性.