今天筆試時候遇到一個問題,找到類似的。網絡
for (i=0; i<N; i++) { if (condition) DoSomething(); else DoOtherthing(); }
if (condition) { for (i=0; i<N; i++) DoSomething(); } else { for (i=0; i<N; i++) DoOtherthing(); }
優勢:程序簡潔函數
缺點:多執行了N-1次邏輯判斷,而且打斷了循環「流水線」做業,使得編譯器不能對循環進行優化處理,下降了效率。優化
優勢:循環的效率高spa
缺點:程序不簡潔code
看到網絡上還有一種回答: blog
前者:
優勢:程序簡潔
條件判斷出如今For裏面,意味着,即便我在dosomething()或dootherthing()這2個函數中改變了condition的值,For循環也能正確執行個人意圖,由於它在每次循環中都會從新檢測conditon的值並針對condition的值作不一樣動做,所謂以不變應萬變,這是難能難得的.
缺點:多執行了N-1次邏輯判斷,而且打斷了循環「流水線」做業,使得編譯器不能對循環進行優化處理,下降了效率。
若是condition一直不曾改變,咱們可憐的if必須每次循環都判斷一下condition的真假.犧牲了運行時效率.
後者:
優勢:循環的效率高。只進行一次判斷,運行時效率高.適合那種condition的值不會改變的狀況.
缺點:因爲只在一開始進行一次判斷,因此失去的改變condition的值的機會,也就是說,即便我在dosomething()中改變了condition的值爲false,這個程序也不會改變它的判斷,它依然執行着dosomething()的循環.咱們不能隨時更換咱們須要進行的動做。這是犧牲了彈性。編譯器
N較大時,建議採用後面這種寫法,因爲前者老要進行邏輯判斷,打斷了循環「流水線」做業,使得編譯器不能對循環進行優化處理,下降了效率。it