递归(二)-------经典递归实例(汉诺塔问题)

      上一篇文章讨论一个经典的递归实例(Fibonacy数列问题),如今来讨论一下另一个经典的递归例子:汉诺塔问题: java

      问题描述:在一个铜板上面立有三根杆(编号A/B/C),A杆上串有若干大小不一的金盘,且小盘在上大盘在下,要把A杆上面的金盘所有转移到C盘上面去,且维持原有的顺序,搬运过程当中能够借助B杆,可是必须遵循下列两条规则: this

    ● 每次只能移动一个盘子 spa

    ●在每次移动中不容许出现大盘压在小盘上面的状况 .net

      如今对问题进行分析:把金盘按照从小到大进行编号,依次为p一、p二、p3.....pn而后: code

    当n=1时,直接从A盘移到C盘 blog

    当n>1时,把搬运任务进行分解: 递归

          第一步,将A上的n-1(杆顶部的)个盘子从A上面搬到B上面,借组C杆 get

          第二步,将pn(第n个盘子)从A杆搬到C杆 class

          第三步,将B上面的n-1个金盘搬到C上面,借组A杆 im

      具体实现代码以下:


public class TestHanoi{
    privte int times=0;   //用来计算搬移的次数
    public static void main(String []args){
        TestHanoi t=new TestHanoi();
        t.hanoi(3,"A","B","C");     
    }
    public void hanoi(int n,char a,char b,char c){
        //有n个金盘,a/b/c为杆
        //当n=1时直接搬运
        if(n==1){
           times++
           System.out.println(times+":"+”将p1从”+a+"搬到"+c);
        }else{
          this.hanoi(n-1,a,c,b);
          times++;
          System.out.println(times+":"+”:\t”+”将p”+"n"+"从"+a+"搬到"+c);
          this.hanoi(n-1,b,a,c);
         }
        
    }
}
    这个例子须要好好的体会。
相关文章
相关标签/搜索