双阶乘用“m!!”表示。当m是自然数时,表示不超过m且与m有相同奇偶性的所有正整数的乘积。如:(2n-1)!!=1×3×5×···×(2n-1)2n!!=2×4×6×8×···×2n当m是负奇数时,表示绝对值小于它的绝对值的所有负奇数的绝对值积的倒数。当m是负偶数时,m!!不存在.在这里,我们只计算正整数,以正整数为例。
工具/原料
一台再正常不过的已经配置了java环境的电脑
Java实现双阶乘
1、创建工程,或使用已有工程,在工程下创建包,包内新建一个类,我命名为DoubleFactorial类,大家根据自己喜好随便命名,但请保持类名与文件名一致。
2、设这个数字是常量17,也即我们要运算的数值是17的阶乘,也即17!private static final int ORIGINAL_NUMBER = 17;
3、这里我用一个递归函数来处理这个问题。考虑到奇偶问题,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的阶乘。
4、将该递归函数写在一个main函数中,运行一下结果。此处,为了不发生折行,我把结果写在两个输出语句里。 System.out.print(ORIGINAL_NUMBER + "!! = "); System.out.println(doubleFactorial(ORIGINAL_NUMBER));如果 original 是 偶数 6,则结果为 48 无误。如果 original 是 奇数17, 则结果为68918850,计算器算得也无误。