有人可以帮助我改进此算法吗?这是一个递归函数,基本上是在做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)

09-26 08:21