Java认证备考辅导之关于汉诺塔递归算法 g( d: q. B" d* {5 v( }
有三根柱子A,B,C,A柱子上有N个盘子,从小到大依次叠放,要求把A上的盘子都移到C上,B可以作为临时存放,移动的时候必须始终遵循小盘子在大盘子上面,且% t8 B2 w" @5 T% t$ @ m5 t3 }. M
每次只能移动一个盘子,求其算法。用java实现如下:
) W1 X1 \' b# c- {! F/ Qpublic class move{. M/ D; u% M1 L
public static void main(String [] args){
3 O) n/ J& I! S+ s0 K0 y$ }move(4,‘a’,‘c’,‘b’);
8 k; S l: K$ \7 I% e8 ^9 O}
, }6 D3 W9 I5 ~( W# k, B3 N//参数n表示移动count个盘子,src表示本来放盘子的,mid是临时存放盘子的,trag是最终目的7 n! c" f. g% O
public static void move(int count,char src,char trag,char mid){
3 \ o/ B7 J% _- y. R dif(count==1){% |5 v! }5 k Q. t$ F5 e
System.out.println(src+“---------》”+trag);4 q7 G: @ f: ~0 c: a" g
}else{2 h1 x+ H" e C) E0 ^+ E) T
move(count-1,src,mid,trag);
' i: _2 E) _; Y' u; Y6 D0 }System.out.println(src+“---------》”+trag);$ Q( T9 Z2 U$ @* U, g
move(count-1,mid,trag,src);: @' k r ~" }, P8 c0 Z
}( I% o) ?7 q! w- o/ @: o' E
}
' @2 r3 D- g+ d6 a6 x2 U( b} |