Java学习之汉诺塔问题

本文介绍了汉诺塔问题的详细解决过程,包括问题描述、递归代码实现、运行原理分析及步骤计算。通过示例解释了如何移动圆盘,并强调了理解递归代码的关键点。
摘要由CSDN通过智能技术生成

目录

汉诺塔:

问题描述:

代码:

运行原理分析:

运行结果:

内存分析图:

计算步数:

思路:

关键点:

代码:


汉诺塔:

问题描述:

从左至右依次有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                                                     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值