本人菜鸟一枚,初学Python,看完汉诺塔的代码很是迷惑,记录一下自己花了几天得出的自认为比较合理的理解,当然,在大神目前不过是班门弄斧,以下是我的理解,也算是我的整理:
首先汉诺塔的基本原理,大家应该都懂,大概就是:有三根柱子,第一根柱子上有若干个盘,由大到小往上叠,要求借助其中一根柱子,把第一根柱子上的盘全部移过去另外一根柱子,移动过程要求大盘在下面,小盘在上面。
而代码的实现用递归,也就是想办法让这个移动的过程不断重复相同的几个动作,你可以把这个问题倒着来想,也就是说,把最下面那一个盘子成功移动到第三根柱子(这个可以自己选,移动到第二根也可以)那么这一步的上一步,一定是这个移动的盘子上面的所有盘子,既n-1个盘子,在第二根柱子上,然后这个问题又可以变成把n-1个盘子的最下面那个盘子成功移动到三根柱子,这样的话,它的上一步就是n-2根柱子在第一根柱子上,所以和上一步是重复的,以此类推。
以下是Python的代码:
其中a,b,c代表三根柱子,注意:A,B,C和a,b,c有点不一样,因为传进去的A,B,C位置固定,对应着函数里面的a,b,c,但是函数在递归调用的时候它们的目标不一样,所以顺序不一样,函数大致可以理解为move(盘数,当前所在柱子,借助柱子,目标位置柱子),也就是说,A一直都是传给当前所在柱子,B一直都是传给借