汉诺塔算法-换一种方式去理解

汉诺塔,开始我也不知道这是干啥的,baidu了一下,古老传说之类,纯属没用的hbb.

其实简单直接的理解,不如看输出结果:(A,B,C三根柱子,A上有3个盘子,从小到大,1,2,3,从A移到C,结果还是从小到大,123,一步只能移动一个盘子,且总是小的在上面,这是规则)

结果:

从A移动盘子1号到C
从A移动盘子2号到B
从C移动盘子1号到B

**********************
从A移动盘子3号到C

**********************
从B移动盘子1号到A
从B移动盘子2号到C
从A移动盘子1号到C


可以用笔在纸上画画,就知道大概是怎么搬盘子了。


我们可以分析这个结果,大致分为三步,

1 从A移到B(中间经历了三步,但最终把A上的盘子移到了B)

2 从A移到C (这时,A柱上还剩最大的那个盘子,经过1的操作,已经把A柱上的盘子(除了最大的那个)已经都搬到了B上,直接把A最大的扳道C就可以了)

3 从B移到C(从B到C,中间也得经过三部,也要借助A柱,说白了,这时候的A冲当了B的角色)


再把java实现贴上,互相印证下吧


public static void moveDish(int level, char from, char inner, char to) {
  if (level == 1) {
   System.out.println("从" + from + "移动盘子1号到" + to);
  } else {
   moveDish(level - 1, from, to, inner);//表示第一大步,把A的盘子现搬到B(除了最大的那个盘子)
   System.out.println("从" + from + "移动盘子" + level + "号到" + to);(把A最大的盘子搬到C)
   moveDish(level - 1, inner, from, to);(除了最大的盘子在C,A柱上光毛了,其余都在B上,那么把B搬到C吧)

//这个算法,理解难,写出来很简单,只要把这三部记住,很轻松就能写出汉诺塔了。

  }
 }

 public static void main(String[] args) {
  int dDishks = 3;
  moveDish(dDishks, 'A', 'B', 'C');

 }












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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值