2 回答
TA贡献1854条经验 获得超8个赞
这些是相同的。
Big-O 只有在你有循环的情况下才会发挥作用,它们都以恒定的时间运行O(1)
。
通常,避免嵌套。我个人更喜欢第一种选择。但是真的一点区别都没有,尤其是短路的原因:
如果!(N % 2 == 0)
是true
在您的第一个示例中,||
则将“短路”,这意味着因为它找到了一个真理,它不会评估它的右半部分。这与第二个示例中的 if 语句相同。运算符也是如此&&
- 如果遇到单个值,它们会“短路” false
,因为它们永远无法以这种方式评估为真。
所以,本质上,选择你喜欢的/更具可读性/逻辑上更连贯的。
TA贡献1811条经验 获得超4个赞
如前所述,两种情况的空间/时间复杂度相同。这里的重要因素是理解代码的复杂性。这归结为在特定情况下的个人判断。
我不确定我更喜欢哪个,因为我不了解怪异的算法,而且我的偏好取决于这两种表述对有见识的读者有多“明显”——我假设任何接触此代码的人都知道它对 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要求避免重复计算,第二,你的意思是省略对零和负整数的考虑吗?(我提出这个问题的观点是,我提出的布局清楚地表明我们不会为这种情况做任何事情,并且我正在为说明的清晰性而争论——目标读者可能不得不怀疑这种明显的遗漏)
另外,当我在吹毛求疵的时候
(!(N % 2 == 0))
通过将其写为
(N % 2 != 0)
添加回答
举报