双阶乘用“m!!”表示。
当m是自然数时,表示不超过m且与m有相同奇偶性的所有正整数的乘积。如:
(2n-1)!!=1×3×5×···×(2n-1)
2n!!=2×4×6×8×···×2n
当m是负奇数时,表示绝对值小于它的绝对值的所有负奇数的绝对值积的倒数。
当m是负偶数时,m!!不存在.
在这里,我们只计算正整数,以正整数为例。

前期准备工作(包括相关工具或所使用的原料等)一台再正常不过的已经配置了java环境的电脑 Java实现双阶乘
创建工程,或使用已有工程,在工程下创建包,包内新建一个类,我命名为DoubleFactorial类,大家根据自己喜好随便命名,但请保持类名与文件名一致。

设这个数字是常量17,也即我们要运算的数值是17的阶乘,也即17!
private static final int ORIGINAL_NUMBER=17;

这里我用一个递归函数来处理这个问题。
考虑到奇偶问题,if语句进行判断:
private static long doubleFactorial(long original) {
if (original % 2==0) {
if (original==2) {
return 2L;
}
return original * doubleFactorial(original - 2);
} else {
if (original==1) {
return 1L;
}
return original * doubleFactorial(original - 2);
}
}
//递归函数消耗资源较大,而且long值表示的范围在此也很局限,因个人电脑配置以及JVM内存配置而异,factorial值不应该过大,此处,笔者的机子最多可以算出23的阶乘。

将该递归函数写在一个main函数中,运行一下结果。
此处,为了不发生折行,我把结果写在两个输出语句里。
System.out.print(ORIGINAL_NUMBER + "!!=");
System.out.println(doubleFactorial(ORIGINAL_NUMBER));
如果 original 是 偶数 6,则结果为 48 无误。
如果 original 是 奇数17, 则结果为 68918850,计算器算得也无误。

注意事项一定要快快乐乐地学习注意代码书写规范递归函数消耗资源较大,而且long值表示的范围在此也很局限,因个人电脑配置以及JVM内存配置而异,算阶乘的数不应该过大经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。作者声明:本教程系本人依照真实经历原创,未经许可,谢绝转载。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
