2 回答

TA貢獻(xiàn)1854條經(jīng)驗 獲得超8個贊
這些是相同的。
Big-O 只有在你有循環(huán)的情況下才會發(fā)揮作用,它們都以恒定的時間運行O(1)
。
通常,避免嵌套。我個人更喜歡第一種選擇。但是真的一點區(qū)別都沒有,尤其是短路的原因:
如果!(N % 2 == 0)
是true
在您的第一個示例中,||
則將“短路”,這意味著因為它找到了一個真理,它不會評估它的右半部分。這與第二個示例中的 if 語句相同。運算符也是如此&&
- 如果遇到單個值,它們會“短路” false
,因為它們永遠(yuǎn)無法以這種方式評估為真。
所以,本質(zhì)上,選擇你喜歡的/更具可讀性/邏輯上更連貫的。

TA貢獻(xiàn)1811條經(jīng)驗 獲得超4個贊
如前所述,兩種情況的空間/時間復(fù)雜度相同。這里的重要因素是理解代碼的復(fù)雜性。這歸結(jié)為在特定情況下的個人判斷。
我不確定我更喜歡哪個,因為我不了解怪異的算法,而且我的偏好取決于這兩種表述對有見識的讀者有多“明顯”——我假設(shè)任何接觸此代碼的人都知道它對 N 意味著什么奇怪。
但在第二種情況下,我更喜歡更少的比較。如果一個子句處理 N <= 5,則下一個替代方案不需要確保 N >= 6。
因此(在偽代碼中)
else if (N <= 1) {
// no decision according to original code
} else if (N <= 5) {
print not weird
} else if (N <= 20) {
print weird
} else {
print not weird
}
N是奇怪的還是不奇怪的?那么,第一,else要求避免重復(fù)計算,第二,你的意思是省略對零和負(fù)整數(shù)的考慮嗎?(我提出這個問題的觀點是,我提出的布局清楚地表明我們不會為這種情況做任何事情,并且我正在為說明的清晰性而爭論——目標(biāo)讀者可能不得不懷疑這種明顯的遺漏)
另外,當(dāng)我在吹毛求疵的時候
(!(N % 2 == 0))
通過將其寫為
(N % 2 != 0)
添加回答
舉報