如何理解汉诺塔小游戏(新手向)

如何理解汉诺塔小游戏(新手向)

笔者是Java新手希望各位大佬多多指教。今天我分享一个我自己对递归算法汉诺塔的理解。



 public class hanoiTower{
		public static void main(String[] args){
			
		T t1 = new T();
		t1.mov(5,'A','B','C');
	}
}
class	T{
	public void mov(int num,char a,char b,char c){
		if(num == 1){
			System.out.println(a + "移动到" + c);
		}else{
			mov(num - 1,a ,c,b);
			System.out.println(a + "移动到" + c);
			mov(num - 1,b,a,c);
		}	

		
	}
	
}

//

以上就是汉诺塔的所有代码了。我第一次接触汉诺塔想了好一阵,包括看着代码也不太不明白。总的来说我理解的这个汉诺塔就跟洋葱一样一层一层的拨开去理解。

第一,作为新手的第一步你需要知道System.out.println(a + "移动到" + c);这句语句是把移动的过程输出在控制台上,让你看见他移动的过程
在这里插入图片描述
然后mov(num - 1, a ,c , b);才是汉诺塔一个盘子的移动过程。

第二,也就是最重要的核心算法理解。在此之前你必须去了解汉诺塔的基本规则。我就不说了我给你们俩个其他博主链接说的非常清楚:https://www.cnblogs.com/dmego/p/5965835.html
https://www.cnblogs.com/dmego/p/5965835.html

首先我们的参数是a,b,c但是我们往mov()中传的是a,c,b与此同时输出的是a->c此时参数c里的值是b,所以输出的是a->b完成第一个盘从a到b,然后a->c再b->c.这就完成一次盘数等于2的基本移动,然后重点来了。

  1. 通过观察前4次玩法甚至前5次会发现你若想解决n层汉诺塔就得解决n-1层然后依次类推,类似剥洋葱一样一层一层的.如果你要解决n层就必须让n-1个盘循环从A柱移动到B柱所以必然是这样递归
    在这里插入图片描述
  2. 然后当A柱只剩最后一个,直接 a->c 也就是上面的输出了.
  3. 再把n-1个盘从B移动到C
    在这里插入图片描述
    至此完成一次完美的汉诺塔.

我个人是这么理解的.然后至于调用方法的栈机制,算法分析我还没有学到.这个博主的讲解相对详细一点.应该有助于你们的理解.
https://www.cnblogs.com/dmego/p/5965835.html
如果有什么我说的不对的地方,或者有其他的见解欢迎讨论或者留言.感谢观看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值