正整数阶乘指从1乘以2乘以3乘以4一直乘到所要求的数。例如,所要求的数是n,则阶乘式是1×2×3×……×n,设得到的积是x,x就是n的阶乘。这里,我介绍两种用Java实现阶乘运算的方方式。

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

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

运用一个for循环将数值1依次与比他大1的数字相乘直至到17为止。
这里的值比较大,因此int值转化为long值运算。
long factorial=1L;
for (int index=1; index <=ORIGINAL_NUMBER; index++) {
factorial=factorial * index;
}

将该for语句写在一个main函数中,运行一下结果。
如果 factorial 是 6,则结果为 720 无误。
如果 factorial 是 17, 则结果为 355687428096000,计算器算得也无误。

递归函数
如同第一种方式一样,首先创建工程,或使用已有工程,在工程下创建包,包内新建一个类,我命名为Factorial类,大家根据自己喜好随便命名,但请保持类名与文件名一致。

第一种方式我设这个数字是常量17,在这里,为了做对比试验,因此,我还是将这个值设为17,也即我们要运算的数值是17的阶乘,也即17!
private static final int ORIGINAL_NUMBER=17;

这里要用一个递归函数来处理这个问题。
private static long factorial(long factorial) {
if (factorial==1) {
return 1;
}
return factorial * factorial(factorial - 1);
}
//这里应该注意,递归函数消耗资源较大,而且long值表示的范围在此也很局限,因个人电脑配置以及JVM内存配置而异,factorial值不应该过大,此处,笔者的机子最多可以算出23的阶乘。

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

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