汉诺塔程序运行

终于弄懂了汉诺塔程序是怎么运行的

汉诺塔作为递归算法中老生常谈的问题相信大家都很熟悉了,相信会玩九连环的小伙伴会很轻松的解决此问题,但是其代码实现却是很多人的噩梦。而本人也是在最近弄清了基于汉诺塔的双重递归算法的运行逻辑,所以本片文章重点不会放在汉诺塔问题的解决上面而是分享双重递归算法是如何运行的。

代码实现

/*
  函数输入(盘子的个数,初始柱子,中介柱子,目标柱子)
  初始的三个盘子从上到下(从小到大)分别为盘子1,盘子2,盘子3
*/
class HanoiTower{
	//递归函数
	public static void hanoi(int n, char from, char inner, char to){
		if(n == 1){
			System.out.println("盘子1从柱子" + from + "移动到柱子" + to);
		}else{
	        hanoi(n - 1, from, to, inner);
	        System.out.println("盘子" + n + "从柱子" + from + "移动到柱子" + to);
	        hanoi(n - 1, inner, from, to);
	    }
	}
    
    public static void main(String[] args){	
    	//将三个柱子从左到右分别取名为A,B,C
    	hanoi(3, 'A', 'B', 'C');
    }    
}

递归程序运行逻辑

在这里插入图片描述
上图的最右边的打印结果从上到下依次输出得到如下结果:

盘子1从柱子A移动到柱子C
盘子2从柱子A移动到柱子B
盘子1从柱子C移动到柱子B
盘子3从柱子A移动到柱子C
盘子1从柱子B移动到柱子A
盘子2从柱子B移动到柱子C
盘子1从柱子A移动到柱子C

[1]: Robert Lafore. Java数据结构和算法(第二版)[M]. 2004,02.

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值