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;
}
}
Java 实现阶乘算法的更多相关文章
- Java数据结构和算法 - 递归
三角数字 Q: 什么是三角数字? A: 据说一群在毕达哥拉斯领导下工作的古希腊的数学家,发现了在数学序列1,3,6,10,15,21,……中有一种奇特的联系.这个数列中的第N项是由第N-1项加N得到的 ...
- Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法
Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...
- Java字符串排列算法
Java字符串排列算法 题目:现有ABCDE 5个球 构成的排列组合 可重复抽取 最多取到16个 共有多少种组合方式? 比如:取1个球可以构成的组合有 A B C D E 共5种,取2个球可以构成的组 ...
- Java 常用排序算法/程序员必须掌握的 8大排序算法
Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...
- Java实现KMP算法
/** * Java实现KMP算法 * * 思想:每当一趟匹配过程中出现字符比较不等,不需要回溯i指针, * 而是利用已经得到的“部分匹配”的结果将模式向右“滑动”尽可能远 * 的一段 ...
- java结构与算法之选择排序
一 .java结构与算法之选择排序(冒择路兮快归堆) 什么事选择排序:从一组无序数据中选择出中小的的值,将该值与无序区的最左边的的值进行交换. 简单的解释:假设有这样一组数据 12,4,23,5,找到 ...
- java:高速排序算法与冒泡排序算法
Java:高速排序算法与冒泡算法 首先看下,冒泡排序算法与高速排序算法的效率: 例如以下的是main方法: /** * * @Description: * @author:cuiyaon ...
- Java数据结构和算法
首先,本人自学java,但是只学习了java的基础知识,所以想接下来学习一下数据结构和算法,但是找了很多教材,大部分写的好的都是用c语言实现的,虽然知道数据结构和算法,跟什么语言实现的没有关系,但是我 ...
- 【Java数据结构学习笔记之二】Java数据结构与算法之栈(Stack)实现
本篇是java数据结构与算法的第2篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型 栈是 ...
随机推荐
- kmemleak的使用---内存泄露检测工具【转】
转自:http://blog.csdn.net/lishenglong666/article/details/8287783 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] ...
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.12.ASP.NET MVC3的细节:URLs,Routing和Areas
Adam Applied ASP.NET 4 in Context 1 介绍Routing系统 在引入MVC之前,ASP.NET假定被请求的URLs和服务器硬盘上的文件之间有着直接关系.服务器的任务是 ...
- -Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m
-Xms 最小堆的大小, 也就是当你的虚拟机启动后, 就会分配这么大的堆内存给你 -Xmx 是最大堆的大小 当最小堆占满后,会尝试进行GC,如果GC之后还不能得到足够的内存(GC未必会收集到所有当前可 ...
- PHP多表取数据的代码优化
<?php header("Content-type: text/html; charset=utf-8"); //假设这里的$goods_arr 和 $shop_arr ...
- 查看mysql的状态
实时查看mysql状态连接数 查询数 etc mysqladmin -uroot -p '' -h status -i 1
- c#之线程随机
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Android开发:ScrollView嵌套GridView的解决办法
Android开发:ScrollView嵌套GridView的解决办法 前些日子在开发中用到了需要ScrollView嵌套GridView的情况,由于这两款控件都自带滚动条,当他们碰到一起的时候便 ...
- Cube Stacking
Cube Stacking Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 21350 Accepted: 7470 Case T ...
- oracle驱动地址
D:\app\LHComputer\product\12.1.0\dbhome_1\ODP.NET\bin\2.x
- 2007 Asia - Nanjing F题,字典树
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=2 ...