经典汉诺塔问题的推理思路以及求解

汉诺塔是递归中的一道经典题目,接着我们看如何求解以及求解的思路。

首先了解汉诺塔

汉诺塔是给定三根柱子,通过一次移动一片圆盘将一根柱上所有圆盘移到另外一根柱上

而当圆盘数>=2时我们就要借助另外一根柱子当作中间量来转移圆盘,因此一般汉诺塔问题都是三根柱子。

我们在只有一个圆盘时直接一步到位,两个圆盘时需三步,三个圆盘时需七步..........

1.    如上图我们推理出n个圆盘时需要2^n-1步,接下来推理思路,在三个圆盘时我们可以先把A柱的最大圆盘忽略,然后用两个圆盘时的步骤将最大圆盘上的两个圆盘借助C柱移到B柱,然后再把最大圆盘移到C柱,再重复两个圆盘时的步骤,将B柱的两个盘借助A柱再次移到C柱。

2.    而两个圆盘移动操作时借助一个圆盘时的步骤,就是直接A->C所以我们可以由这个思路推理出,递归算法的条件就是(n==1).在n个圆盘时先移走n-1个,再重复步骤。

3.    我们可以证明重复步骤,如四个圆盘时就是15步,分解为三个圆盘时七个步骤移到B柱,再第八步最大圆盘移到C柱,再三个圆盘七个步骤将B柱上的三个圆盘移到C柱,总共7+1+7=15步。

4.    所以我们采用分解思想,保留最底部圆盘,移动n-1个圆盘,如下图:

 

 思路有了后就可以开始实现代码了

 以上就是代码的实现过程

总结:汉诺塔问题并不是难在代码,而是大事化小的思路实现,以及推理出递归的结束条件。这几点难以想到,而想到之后再实现代码就并不是特别难了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我真的很困1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值