一個簡單的遞歸算法墓捻,邏輯是很清晰了片排,例子是網(wǎng)上找的损离,怕新人看不懂,加了點注釋谐腰。
public class Main {
public static void main(String[] args){
int i=3;
char a ='A',b='B',c='C';
cdt(i,a,b,c);
}
/**
* 層疊塔
*/
public static void cdt(int n,char a,char b,char c){
System.out.println(n + " 入口");
if(n==1)
System.out.println("移動"+n+"號盤子從"+a+"到"+c + " n=1的輪詢");
else{
//把上面n-1個盤子從a借助b搬到c 入口1
cdt(n-1,a,c,b);
System.out.println(n + " 第一輪通過");
System.out.println("移動"+n+"號盤子從"+a+"到"+c + " n!=1的輪詢");
//緊接著直接把n搬動c,再把b上的n-1個盤子借助a搬到c 入口2
cdt(n-1,b,a,c);
System.out.println(n + " 結(jié)束");
}
}
}
執(zhí)行結(jié)果
3 入口 第一次進入層疊塔方法
2 入口 從入口1進入層疊塔方法涩盾,主任務(wù)進入等待十气,開啟次任務(wù)
1 入口 從入口1再次進入層疊塔方法,
移動1號盤子從A到C n=1的輪詢 第一輪順利結(jié)束
2 第一輪通過 次任務(wù)通過第一輪
移動2號盤子從A到B n!=1的輪詢
1 入口 從入口2進入層疊塔方法
移動1號盤子從C到B n=1的輪詢 滿足條件后跳出春霍,繼續(xù)執(zhí)行次任務(wù)
2 結(jié)束 次任務(wù)結(jié)束砸西,主任務(wù)開始繼續(xù)執(zhí)行
3 第一輪通過 主任務(wù)通過第一輪
移動3號盤子從A到C n!=1的輪詢
2 入口 主任務(wù)從入口2再次進入層疊塔方法,再次開啟次任務(wù)
1 入口 次任務(wù)開始進入
移動1號盤子從B到A n=1的輪詢 第一輪順利結(jié)束
2 第一輪通過 次任務(wù)通過第一輪
移動2號盤子從B到C n!=1的輪詢
1 入口 從入口2進入層疊塔方法
移動1號盤子從A到C n=1的輪詢 滿足條件后跳出址儒,繼續(xù)執(zhí)行次任務(wù)
2 結(jié)束 次任務(wù)結(jié)束芹枷,主任務(wù)繼續(xù)執(zhí)行
3 結(jié)束 主任務(wù)結(jié)束