Python实现汉诺塔的函数:
def hanoi(n,A,B,C):
if n == 1:
print(A,'-->',C)
else:
hanoi(n-1,A,C,B)
hanoi(1,A,B,C)
hanoi(n-1,B,A,C)
hanoi(3,'A柱子','B柱子','C柱子')
默认情况下:
n是盘子数,A是起始柱,B是中转柱,C是目标柱
要把A柱上的盘按照汉诺塔规则全部移到C柱上
除了1个盘比较特殊外,大于1个盘基本上可以拆分为三步:
首先是要把C柱空出来放最大的,这就需要利用C柱做中转柱,把A柱上除最大的那个盘之外,其它的n-1个盘,利用C柱做为中转,全部从A柱移到B柱上
这种情况下,A是起始柱,C是中转柱,B是目标柱
move(n-1,A,C,B)
然后再把A柱上最大的那个盘移到C柱,这样这个最大的盘就在C柱最下面了(这个只有一步)
这种情况下,A是起始柱,B是中转柱,C是目标柱
move(1,A,B,C)
然后再把B柱上的n-1个盘通过A柱全部移动C柱上。
这种情况下,B柱是起始柱,A是中转柱,C是目标柱
move(n-1,B,A,C)
这样去理解的话,这个函数就很容易写出来了。
其实这个难的不是理解这个函数,而是不知道这个函数前,你能不能通过归纳写出这个函数。