ハノータ再帰アルゴリズムJava実装


        ,   A,B,C,A               n        ,               B ,
           ,      H(n)。

 
問題そのものに戻って、どのように解きますか?
ルール:移動するたびに、同じ柱には現れず、小皿は大皿の上にある.
今仮定します:A柱は3つの皿があって、上から下まで順番に番号をつけます:1、2、3;
3つの皿をすべてB柱に移動します.
その中に必ず存在する状態:
A:3,B:(皿がない)、C:1、2;
全体の問題:必然的に次の3つのプロセスに分解することができます.
1、A柱の2つの皿をC柱に移動する.
2、A柱の1つの皿をB柱に移動する.
3、C柱の2つの皿をB柱に移動する.
A柱の3つの皿をC柱を介してB柱に移動する.
関数で表す:f(3,A,B,C);
1、A柱の2つの皿をC柱に移動する.
f(2,A,C,B);
2、A柱の1つの皿をB柱に移動する.
f(1,A,B,C)->A柱皿をB柱に移動する.
3、C柱の2つの皿をA柱を介してB柱に移動する.
f(2,C,B,A);
関数関係式:f(3,A,B,C)=f(2,A,C,B)+f(1,A,B,C)+f(2,C,B,A);
nに広がる場合:
f(n,A,B,C)=f(n-1,A,C,B)+f(1,A,B,C)+f(n-1,C,B,A);
コード実装:
	/**A/B/C        ,n  A       */
	public void f(int n,char A,char B,char C) {
		
		if(n == 1) {
			System.out.println("move:"+A+"->"+B);
			return;
		}		
		f(n-1,A,C,B);
		f(1,A,B,C);
		f(n-1,C,B,A);		
	}