再帰(二)------経典再帰例(ハノータ問題)


前回の記事では、古典的な再帰例(Fibonacy数列問題)について説明しましたが、もう一つの古典的な再帰例:ハンノタワー問題:
1つの銅板の上に3本の棒(番号A/B/C)が立っていて、A棒の上にいくつかの大きさの異なる金盤が串になっていて、しかも小盤は上の大皿が下にあって、A棒の上の金盤をすべてC盤の上に移して、しかも元の順序を維持して、運搬の過程の中でB棒を借りることができて、しかし以下の2つの規則に従わなければなりません:
●毎回1皿しか移動できない
●移動ごとに大皿が小皿の上に押されることは許されない
今问题に対して分析を行います:金盘を小さいから大きいまで番号をつけて、顺次p 1、p 2、p 3.....pnそして:
n=1の場合、AディスクからCディスクに直接移動
n>1の場合、搬送タスクを分解する:
最初のステップは、Aのn-1(レバー上部の)個の皿をAの上からBの上に運び、Cレバーを借りる
第2ステップでは、pn(n番目の皿)をAロッドからCロッドに運ぶ
第3歩、Bの上のn-1個の金盤をCの上に運んで、A棒を借ります
実装コードは次のとおりです.
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);
         }
        
    }
}

この例はよく体得しなければならない.