有人可以帮助我改进此算法吗?这是一个递归函数,基本上是在做fact(n)* fact(n),但我不知道如何提高效率。
static long doubleFactorial(int n)
{
if (n == 0)
return 1;
System.out.println("DoubleFactorial(" + n + ") called");
return n * doubleFactorial(n - 1) & doubleFactorial(n - 1);
}
任何帮助将非常感激!
最佳答案
只需将其保存到变量中,不要调用它两次:
这是您的代码(假设您想乘以阶乘而不是AND)
static long doubleFactorial(int n) {
if (n == 0)
return 1;
System.out.println("DoubleFactorial(" + n + ") called");
long fact=doubleFactorial(n - 1);
return n * fact * fact;
}
同样,如果删除了递归,效率会更高(但您可能不希望这样做):
static long doubleFactorial(int n){
long ret=1;
for(int i=2;i<n;i++){
ret=i*ret*ret;
}
}
这用循环替换了递归,从而减少了方法调用的次数,从而提高了性能。
另外,它不会创建大量堆栈(可能还有
StackOverflowError
s)