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)(四种方法)相关推荐

  1. 【转】Java中字符串中子串的查找共有四种方法(indexof())

    原文网址:http://wfly2004.blog.163.com/blog/static/1176427201032692927349/ Java中字符串中子串的查找共有四种方法,如下: 1.int ...

  2. Java中字符串中子串的查找共有四种方法(indexof())

    2019独角兽企业重金招聘Python工程师标准>>> public class FirstDemo { /** *API中String的常用方法 */ // 查找指定字符串是否存在 ...

  3. java多线程传值覆盖_Java 多线程传值的四种方法

    其实大家都知道多线程传值有三种方式: 1:通过构造方法传递数据 2:通过变量和方法传递数据 3:通过回调函数传递数据 那么博主有个非常变态的需求,所以找出了第四种实现方式,先看效果图: 动态Cron4 ...

  4. java线程异步传值_Java 多线程传值的四种方法

    Java 多线程传值的四种方法 作者: sunjs 更新时间:2020-09-11 15:20:16 原文链接 其实大家都知道多线程传值有三种方式: 1:通过构造方法传递数据 2:通过变量和方法传递数 ...

  5. java互换_两个变量交换的四种方法(Java)

    对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) 1 class TestEV 2 //创建一个类 3 { 4 public ...

  6. java时间代码_java获取当前时间的四种方法代码实例

    这篇文章主要介绍了java获取当前时间的四种方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 第一种:Date类 public class ...

  7. bash shell函数中返回任意值的四种方法

    From: http://www.jbxue.com/article/11322.html 本文介绍下,在bash shell编程中,从函数中返回任意值的几种方法,有需要的朋友参考下. 在bash中, ...

  8. Java遍历Properties的所有的元素,四种方法详细总结的代码实例

    使用Java代码,详细示范四种遍历Properties中的所有元素,并打印输出的代码实例. 直接看代码吧.具体怎么读的文件,我在这就省略啦.我的前一篇文章就是示范怎么读和写Properties文件的. ...

  9. C语言-求阶乘和的两种方法

    目录 方法一:递归法 方法二:循环法 fun.c文件 fun.h文件 main.c文件 方法一:递归法 /** 递归法 求阶乘和**/ long Factorial_sum_way1(int m){i ...

  10. Java语言中抽取word、pdf的四种方法

    1.用jacob. 其实jacob是一个bridage,连接java和com或者win32函数的一个中间件,jacob并不能直接抽取word,excel等文件,需要自己写dll哦,不过已经有为你写好的 ...

最新文章

  1. 产生0到1之间均匀分布的一个随机数原理与实现
  2. 《系统集成项目管理工程师》必背100个知识点-35核实的可交付成果和验收的可交付成果...
  3. ASP.NET MVC分页实现
  4. 摇杆控制方向原理_医用无油空压机的送料作用及工作原理
  5. 【bzoj2406】矩阵 二分+有上下界可行流
  6. SIP协议 会话发起协议(二)
  7. spring之依赖注入
  8. C#之多态与继承汽车类
  9. 函数调用关系python_追踪python函数调用关系
  10. PowerDesigner生成建表脚本时字段超过15字符就发生错误
  11. 【渝粤教育】电大中专学前儿童社会教育作业 题库
  12. 九度OJ - 题目1481:Is It A Tree?
  13. cad 绘制直线 设定长度 角度
  14. MSTAR数据集处理
  15. 从威胁到整合,容器将改变openstack的未来?
  16. edp和edt哪个好_香水edp和edt的区别
  17. 软技能入门《质量》系列 -- 密切追踪
  18. c语言strcat()/strcat_s()函数详解
  19. 职工信息存入文件employee,再抽取部分信息存入另一个文件employee_type
  20. Educoder计算机数据表示实验(HUST)-汉字国标码转区位码实验偶校验编码设计logisim

热门文章

  1. 蜘蛛池包收录 - 百度代发排名
  2. 记录一下2020TI杯省赛
  3. 控件:ExpandableListView --- 树型组件
  4. 高新技术企业申报的条件,你知道吗?
  5. 计算机中丢失crashrpt,crashrpt.dll
  6. uc/os-ii消息邮箱
  7. 一起Talk编程语言吧
  8. [战略]最近整理代码的一些总结和未来规划
  9. 思科认证安全工程师一分钟学会思科防火墙的基本配置 实用收藏
  10. KMP算法-超级无敌详细(嚼碎了喂你)