我正在完成欧拉计划中的一个项目,遇到了一个组合问题。 组合逻辑意味着计算阶乘。 因此,我决定创建一个阶乘方法。 随后我遇到了一个问题-既可以使用迭代也可以使用递归来完成,那么我应该选择哪个?我很快写了两种方法-迭代:
public static long factorial(int num) {
long result = 1;
if(num == 0) {
return 1;
}
else {
for(int i = 2; i <= num; i++) {
result *= i;
}
return result;
}
并且递归:
public static long factorial(int num) {
if(num == 0) {
return 1;
}
else {
return num * factorial(num - 1);
}
}
如果我(显然)在谈论速度和功能,那么我应该使用哪种技术?并且,一般来说,这两种技术中有一种更好吗?(所以如果我以后遇到这个选择,应该选择哪个?)
num == 1
,则无需再检查num == 0
,你可以直接返回1,这样就不需要额外的迭代/函数调用了。 - luketorjussenint res = 1; for (int i = 2; i <= num; ++i) res *= i; return res;
。 - Niklas B.