java factorial_[Java]函数求阶乘n!(factorial)(四种方法)
1. 引言
实现阶乘的方法很多,这边介绍三种方法,分别是递归,尾递归,循环和BigDecimal。
2. 代码
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Alogrithm a = new Alogrithm1();
a.fact(5);
a.print(a.factN(6));
a.print(a.factFor(7));
}
}
class Alogrithm{
void fact(int n){
fact_inter(n,1);
}
int fact_inter(int n, int product){
if(n == 1 || n == 0){
System.out.println("step n=" + n +" value:"+product);
return 1*product;
}else{
System.out.println("step n=" + n +" value:"+product);
return fact_inter((n-1),n*product);
}
}
int factN(int n){
if(n == 1 || n==0){
return 1;
}else{
return n*factN(n - 1);
}
}
int factFor(int n){
int sum = 1;
if(n == 0){
return 1;
}
for(int i = 1; i <= n; i++){
sum*=i;
}
return sum;
}
void print(int x){
System.out.println("x=" + x);
}
}
3. 输出
step n=5 value:1
step n=4 value:5
step n=3 value:20
step n=2 value:60
step n=1 value:120
x=720
x=5040
4. 说明
int类型的输出 n只能支持到12,在12-33的数值会得到错误的输出值可能正数可能负数,34及以上输出0.
long类型的输出 n只能支持到20,在20-65的数值会得到错误的输出值可能正数可能负数,36及以上输出0.
5.牛逼的BigDecimal来了
修改下上面的部分代码如下:
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Alogrithm a = new Alogrithm1();
a.fact(5);
a.print(a.factN(6));
a.print(a.factFor(7));
a.print(a.factBig(100));
a.print(a.factBig(1000));
}
}
//BigDecimal的递归方法,其它两种方式把int替换成BigDecimal处理也等价
public BigDecimal factBig(int n){
if(n == 1 || n==0){
return BigDecimal.valueOf(1);
}else{
return BigDecimal.valueOf(n).multiply(factBig(n - 1));
}
}
//修改输出
void print(Object x){
System.out.println("x=" + x.toString());
}
这样子n的值就可以很大了,不受int和long的长度限制了。
java factorial_[Java]函数求阶乘n!(factorial)(四种方法)相关推荐
- 【转】Java中字符串中子串的查找共有四种方法(indexof())
原文网址:http://wfly2004.blog.163.com/blog/static/1176427201032692927349/ Java中字符串中子串的查找共有四种方法,如下: 1.int ...
- Java中字符串中子串的查找共有四种方法(indexof())
2019独角兽企业重金招聘Python工程师标准>>> public class FirstDemo { /** *API中String的常用方法 */ // 查找指定字符串是否存在 ...
- java多线程传值覆盖_Java 多线程传值的四种方法
其实大家都知道多线程传值有三种方式: 1:通过构造方法传递数据 2:通过变量和方法传递数据 3:通过回调函数传递数据 那么博主有个非常变态的需求,所以找出了第四种实现方式,先看效果图: 动态Cron4 ...
- java线程异步传值_Java 多线程传值的四种方法
Java 多线程传值的四种方法 作者: sunjs 更新时间:2020-09-11 15:20:16 原文链接 其实大家都知道多线程传值有三种方式: 1:通过构造方法传递数据 2:通过变量和方法传递数 ...
- java互换_两个变量交换的四种方法(Java)
对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) 1 class TestEV 2 //创建一个类 3 { 4 public ...
- java时间代码_java获取当前时间的四种方法代码实例
这篇文章主要介绍了java获取当前时间的四种方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 第一种:Date类 public class ...
- bash shell函数中返回任意值的四种方法
From: http://www.jbxue.com/article/11322.html 本文介绍下,在bash shell编程中,从函数中返回任意值的几种方法,有需要的朋友参考下. 在bash中, ...
- Java遍历Properties的所有的元素,四种方法详细总结的代码实例
使用Java代码,详细示范四种遍历Properties中的所有元素,并打印输出的代码实例. 直接看代码吧.具体怎么读的文件,我在这就省略啦.我的前一篇文章就是示范怎么读和写Properties文件的. ...
- C语言-求阶乘和的两种方法
目录 方法一:递归法 方法二:循环法 fun.c文件 fun.h文件 main.c文件 方法一:递归法 /** 递归法 求阶乘和**/ long Factorial_sum_way1(int m){i ...
- Java语言中抽取word、pdf的四种方法
1.用jacob. 其实jacob是一个bridage,连接java和com或者win32函数的一个中间件,jacob并不能直接抽取word,excel等文件,需要自己写dll哦,不过已经有为你写好的 ...
最新文章
- 产生0到1之间均匀分布的一个随机数原理与实现
- 《系统集成项目管理工程师》必背100个知识点-35核实的可交付成果和验收的可交付成果...
- ASP.NET MVC分页实现
- 摇杆控制方向原理_医用无油空压机的送料作用及工作原理
- 【bzoj2406】矩阵 二分+有上下界可行流
- SIP协议 会话发起协议(二)
- spring之依赖注入
- C#之多态与继承汽车类
- 函数调用关系python_追踪python函数调用关系
- PowerDesigner生成建表脚本时字段超过15字符就发生错误
- 【渝粤教育】电大中专学前儿童社会教育作业 题库
- 九度OJ - 题目1481:Is It A Tree?
- cad 绘制直线 设定长度 角度
- MSTAR数据集处理
- 从威胁到整合,容器将改变openstack的未来?
- edp和edt哪个好_香水edp和edt的区别
- 软技能入门《质量》系列 -- 密切追踪
- c语言strcat()/strcat_s()函数详解
- 职工信息存入文件employee,再抽取部分信息存入另一个文件employee_type
- Educoder计算机数据表示实验(HUST)-汉字国标码转区位码实验偶校验编码设计logisim