递归算法

来源:互联网 发布: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);
}


}

原创粉丝点击