java - 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);
}
任何帮助将非常感激!
解决方案
如果您愿意,您的逻辑不会返回,您可以定义例如: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);
}
推荐阅读
- php - 我如何使用格式日期功能
- c# - 在基类内部强制基类虚方法调用
- android - ionic - 在本地通知插件中更改图标的正确方法是什么?
- watchos - tintColor 不适用于 watchOS 5 复杂功能
- c# - 查找给定应用程序的子表单
- php - 以编程方式有条件地向 Woocommerce 3 添加折扣
- go - vsCode golang运行脚本有2个文件
- javascript - 重新加载时如何在 VueJS 中重置组件的道具?
- json - 我不明白 json 中的斜杠来自服务器响应中的位置
- python - 插入 Frame 时,我的 Tk() 窗口的背景图像被部分覆盖