Java 实现阶乘算法
阶乘算法如下:
以下列出 0 至 20 的阶乘:
0!=1,0 的阶乘是存在的)
1!=1,
2!=2,
3!=6,
4!=24,
5!=120,
6!=720,
7!=5040,
8!=40320
9!=362880
10!=3628800
11!=39916800
12!=479001600
13!=6227020800
14!=87178291200
15!=1307674368000
16!=20922789888000
17!=355687428096000
18!=6402373705728000
19!=121645100408832000
20!=2432902008176640000
而当 n≥5 时,n!的个位数字都是0。
java代码实现
package com.leo.kang.interview;
import java.math.BigDecimal;
public class Factorial {
/**
* @param args
*/
public static void mainString[] args) {
// TODO Auto-generated method stub
System.out.println“——–递归算法——-“);
System.out.printlnfactorialRecursive20));
System.out.println“——–循环算法——-“);
System.out.printlnfactorialLoop25));
System.out.println“——–BigDecimal算法——-“);
System.out.printlnfactorialnew BigDecimal100)));
}
/**
* 递归实现阶乘算法
*
* @param n
* @return
*/
public static long factorialRecursiveint n) {
// 阶乘对整数才有意义
if n < 0) {
return -1;
}
// 0!=1,0 的阶乘是存在的)
if n == 0) {
return 1;
}
if n < 2)
return n * 1;
return n * factorialRecursiven – 1);
}
/**
* 循环实现阶乘算法
* @param n
* @return
*/
public static long factorialLoopint n) {
// 阶乘对整数才有意义
if n < 0) {
return -1;
}
// 0!=1,0 的阶乘是存在的)
if n == 0) {
return 1;
}
// 初始值必须为1才有意义
long result = 1;
for int i = n; i > 0; i–) {
result *= i;
}
return result;
}
public static BigDecimal factorialBigDecimal n){
BigDecimal bd1 = new BigDecimal1);//BigDecimal类型的1
BigDecimal bd2 = new BigDecimal2);//BigDecimal类型的2
BigDecimal result = bd1;//结果集,初值取1
whilen.compareTobd1) > 0){//参数大于1,进入循环
result = result.multiplyn.multiplyn.subtractbd1)));//实现result*n*n-1))
n = n.subtractbd2);//n-2后继续
}
return result;
}
}