目录
汉诺塔:
问题描述:
从左至右依次有A,B,C三个塔,A塔上有若干个由上到下,由小到大排列的圆盘,要求将圆盘从A塔移动到C塔,必须保证大圆盘在下,小圆盘在上的排列规则
假如共有5层
第一步:需要把1~4层从A->B,然后把第5层从A->C
第二步:需要把1~3层从B->A,然后把第4层从B->C
第三步:需要把1~2层从A->B,然后把第3层从A->C
第四步:需要把第1层从B->A,然后把第2层从B->C
第五步:需要把第1层从A->C
代码:
//汉诺塔问题
public class HanoiTower{
//编写一个main方法
public static void main(String[] args){
Tower t1 = new Tower();
t1.move(2, 'A', 'B', 'C');
}
}
class Tower{
//一共有A,B,C三个塔,A塔上有n个圆盘,从上到下由小到大的顺序垒在一起的,
//请将A塔上的圆盘移动到C塔,移动过程中必须是小圆盘在大圆盘上面
//返回数据类型:void
//方法名:move移动
//形参:(int num, char a, char b, char c)
//num表示要移动的圆盘的个数,a,b,c表示A塔,B塔,C塔
public void move(int num, char a, char b, char c){
//分为两种情况:1)只有一个圆盘2)多个圆盘
if(num == 1){//只有一个圆盘,直接从a到c
System.out.println(a + "->" + c);
}else{//有多个圆盘
//1)将最后一个圆盘外的其余圆盘全都从a移动到b,需要借助c
move(num-1, a, c, b);
//2)将有一个圆盘,直接从a移动到c
System.out.println(a + "->" + c);
//将其余圆盘通过a从b移动到c