简述java递归实现汉诺塔

目录

题目:

程序分析:

代码实现:

代码效果:


题目:

有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子C上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,请问移动方案是什么?

程序分析:

如果该塔为h层,我们看成两部分,下面一个和上面所有的即为(h -1),我们先将上面所有(h-1)由a移动到b上,下面那个一个由a移动到c上,然后将b上的借助a移动到c上面.每次实现都使用moveTower方法实现。

代码实现:

public class HanoiTower{
	public static void main (String[] args){
		Tower tower = new Tower();
		tower.moveTower(3,'A','B','C');

	}
}
class Tower{
	//无返回值
	// int h 接受几层的汉诺塔, char a,b,c 用于记录移动的轨迹,要求从a 到 c
	public void moveTower(int h , char a , char b ,char c){
		//递归结束条件 如果该塔为1层
		if(h == 1){
			System.out.println(a + "->"+ c);//一层的话直接从a到c
		}else{
			//无论该塔多少层,我们看成两部分,下面一个和上面所有(h -1),我们先将上面所有由a移动到b上
			//下面那个一个由a移动到c上,然后将b上的借助a移动到c上面
			moveTower( h-1,  a, c, b);
			System.out.println(a + "->" + c);
			moveTower(h-1, b, a, c);
			// System.out.println(b + "->" + c);
			
		}

	}
}

代码效果:

我们假设该汉诺塔为3层,看代码实现的实际移动路线。

 画图实现一下:

猜你喜欢

转载自blog.csdn.net/weixin_64131583/article/details/123130722