汉诺塔可以说是编程语言中递归用法的经典案例
类似的编程案例有上楼梯:每次只能走一阶或两阶,一共有多少层走法?
这种类型的题目,主要的突破点在于 倒退法!
当我们采用常规的思路去寻求突破时,虽然每层只有一种或两种选择,但是不同层间的结合却是一个庞大的数字,正常人无法一一列举,所以采用枚举法无疑是自寻死路,会感觉这就是的无底洞。
但是当我们站在终点去倒退的时候,给我们的选择也是两种,具体的说是两类,因为你不需要考虑之前的结合方法,你只需要考虑你当前只要选择一次就能完成整个任务,所以此时的处理就变成了二选一。
当你完成了此时的目的时,将你此时的位置设置为终点,然后倒退上一步的选择,这时候你即不需要考虑后面的操作(上一步已经完成),也不需要考虑在此之前的众多步骤,还是回归到了二选一的环节。
按照这种思路一直循环下去,直到完成此题。
附上python的代码:
def deal(n,x,y,z):
if n==1:
print(x,’->’,z)
else:
deal(n-1,x,z,y)
print(x,’->’,z)
deal(n-1,y,x,z)
deal(3,‘X’,'Y','Z')