Java 实现阶乘算法
package com.leo.kang.interview; import java.math.BigDecimal; public class Factorial { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("--------递归算法-------"); System.out.println(factorialRecursive(20)); System.out.println("--------循环算法-------"); System.out.println(factorialLoop(25)); System.out.println("--------BigDecimal算法-------"); System.out.println(factorial(new BigDecimal(100))); } /** * 递归实现阶乘算法 * * @param n * @return */ public static long factorialRecursive(int n) { // 阶乘对整数才有意义 if (n < 0) { return -1; } // 0!=1,(0 的阶乘是存在的) if (n == 0) { return 1; } if (n < 2) return n * 1; return n * factorialRecursive(n - 1); } /** * 循环实现阶乘算法 * @param n * @return */ public static long factorialLoop(int 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 factorial(BigDecimal n){ BigDecimal bd1 = new BigDecimal(1);//BigDecimal类型的1 BigDecimal bd2 = new BigDecimal(2);//BigDecimal类型的2</span><span> BigDecimal result = bd1;//结果集,初值取1 while(n.compareTo(bd1) > 0){//参数大于1,进入循环 result = result.multiply(n.multiply(n.subtract(bd1)));//实现result*(n*(n-1)) n = n.subtract(bd2);//n-2后继续 } return result; } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。