首页 > 解决方案 > Java - 递归双阶乘算法

问题描述

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

任何帮助将非常感激!

标签: javarecursion

解决方案


如果您愿意,您的逻辑不会返回,您可以定义例如:fact(n) * fact(n)

f(0)=1
f(1)=1
f(2)=2^2*f(1)=4*f(1)
.
.    
f(10)=10^2*f(9)
.
.
f(n)=n^2*f(n-1)

所以你可以使用下面的代码:

static long doubleFactorial(int n)
{
    if (n == 0)
        return 1;

    System.out.println("DoubleFactorial(" + n + ") called");
    return n * n * doubleFactorial(n - 1);
}

在线尝试doubleFactorial(5)=14400


推荐阅读