2 回答

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

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