递归算法
来源:互联网 发布:a星算法的优缺点 编辑:程序博客网 时间:2024/06/07 02:05
下面是几个经典的递归问题
package app.action;
/**
* @description
* •递归算法有四个特性:
(1)必须有可最终达到的终止条件,否则程序将陷入无穷循环;
(2)子问题在规模上比原问题小,或更接近终止条件;
(3)子问题可通过再次递归调用求解或因满足终止条件而直接求解;
(4)子问题的解应能组合为整个问题的解。
* @version 1.0
* @author meify 2013-7-26 上午10:57:51
*/
public class Recuration {
/**
*
* @param n
* @param A
* @param B
* @param C
* @version 1.0
* @description 汉诺塔问题: 将n个盘子借助B柱从A柱移动C柱
* @author meify 2013-7-26 上午10:25:51
*/
public void hanio(int n,Object A,Object B,Object C){
if(n==1){
//直接就从A移到C
move(A,1,C);
}else{
//先将n-1个盘子从A移到B
hanio(n-1,A,C,B);
//再 将剩下一个盘子从A移到C
move(A,1,C);
//最后再讲n-1个盘子从B移到C
hanio(n-1,B,A,C);
}
}
public void move(Object x,int n,Object y){
System.out.println("move "+n+" from "+x+" to "+y);
}
/**
*
* @param n
* @return
* @version 1.0
* @description febbonacci数列
* @author meify 2013-7-26 上午10:42:50
*/
public long febonacci(int n){
if(n==0||n==1){
return n;
}else{
return febonacci(n-2)+febonacci(n-1);
}
}
/**
*
* @param n
* @return
* @version 1.0
* @description 实现1+2+3+4+。。。累加 递归实现
* @author meify 2013-7-26 上午10:45:45
*/
public long total(int n){
if(n==1){
return n;
}else{
return total(n-1)+n;
}
}
/**
*
* @param n
* @return
* @version 1.0
* @description 累积 递归实现
* @author meify 2013-7-26 上午10:48:42
*/
public long accumulate(int n){
if(n==1){
return n;
}else{
return n*accumulate(n-1);
}
}
public void tower(int n){
if(n==1){
draw(n);
}else{
tower(n-1);
draw(n);
}
}
public void draw(int n){
for(int i=0;i<n;i++){
System.out.print(n+"\t");
}
System.out.println();
}
public static void main(String[] args) {
Recuration demo=new Recuration();
// Object A=new Character('A');
// Object B=new Character('B');
// Object C=new Character('C');
// demo.hanio(3, A, B, C);
// System.out.println(demo.febonacci(6));
// System.out.println(demo.total(5));
// System.out.println(demo.accumulate(5));
demo.tower(5);
}
}
- 递归算法
- 递归算法
- 递归算法
- 递归算法
- 递归算法
- 递归算法
- 递归算法
- 递归算法
- 递归算法
- 递归算法
- 递归算法
- 递归算法
- 递归算法
- 递归算法
- 递归算法
- 递归算法
- 递归算法
- 递归算法
- HDU 4619 Warm up 2 最大匹配数
- 使用Grand生成ANT的Target依赖关系图
- 【String.xml】修改Android中strings.xml文件, 动态改变数据
- 游戏类别
- Oracle 补充日志
- 递归算法
- struts2中struts.i18n.encoding的问题
- linux 之 popen函数
- kcm文件(不知道干啥用的)
- 【Unity 3D 游戏引擎】NGUI 触摸UI和人物行走冲突的解决办法
- 黑马程序员-代理和AOP
- const的位置及区别
- codeforces 6B. President's Office
- 错误与修复:ASP.NET无法检测IE10,导致_doPostBack未定义JavaScript错误,恒处于FF5卷动条位置