hanoi tower:
最近在學習python,講函數遞歸的章節時以漢諾塔爲例,說實話思考了很長一段時間:(⊙﹏⊙)b
把代碼貼出來,順帶寫下自己的理解:
#!/usr/bin/env python2
#coding:utf-8
def move(num,A,B,C):
if num==1:
print A,'-->',C
else:
move(num-1,A,C,B) ###1
move(1,A,B,C)<span style="white-space:pre"> </span> ###2
move(num-1,B,A,C) ###3
pass
hanoi = input("please input the plates number:")
if isinstance(hanoi,(int)):#hanoi.isdigit():
move(hanoi,'A','B','C')
第一步:要先解決 n 層的漢諾塔問題,要將 n-1 層的漢諾塔從A柱經C柱轉移到 B柱(對應###1),其本身也是一個遞歸問題;
第二步:需要將漢諾塔的第n層從A柱轉移到C柱(對應###2)(注意:是第n層,只是那一個圓餅,不是“n 層”,n個圓餅)。
第三步:現在的情況是B柱上有n-1層的漢諾塔(n-1個圓餅),C柱上只有一個,B柱爲空;這就是另一個循環開始的地方(對應###3)