【发布时间】:2016-08-27 16:30:22
【问题描述】:
所以,在 C 程序中用下面的函数来判断一个数是素数还是合数:
/**
* Determine if a given integer is prime. O(sqrt n).
* n: The integer to examine.
* return: TRUE if n is prime; FALSE if n is not prime.
*/
BOOL APIENTRY IsPrime(int n)
{
int i;
double test;
if(n <= 1) return FALSE;
else if(n <= 3) return TRUE; // Is the else keyword at beginning of this line useful?
for(i = 2; i <= sqrt(n); i++)
{
test = (double) n / (double) i;
if (test == floor(test)) return FALSE;
}
return TRUE;
}
如果我只用 if (n <= 3) return TRUE; 替换第 12 行,该函数仍然可以正常工作(因为前面的 if 语句在 n 为 1、0 或负数的前提下捕获了 n 不是素数的情况)。无论如何我都应该保留else 关键字吗?
【问题讨论】:
-
我相信在这种情况下这是一个风格问题。
-
用浮点运算来做整数计算,最终很可能会出问题。
-
请记住,源代码有两种受众:编译器和维护者。正如您所指出的,编译器有望识别
return并使else变得多余。但是维护者呢?如果else增加了价值——通过与他们沟通这是一个独家案例——然后保留它。
标签: c if-statement return control-flow