首先你要知道漢諾塔是通過遞歸函數來解決的,遞歸函數,通俗易懂講就是自己調用自己,類似於貓抓自己的尾巴,然后你可以腦子里把他想象成一個圈了。
漢諾塔的規則我就不說了,只給大家講講怎么理解代碼
1 def move(n,a,b,c): #n代表圓盤數,a,b,c分別代表初始柱,緩沖柱,目標柱 2 if n==1: 3 print(a,'-->',c) 4 else: 5 move(n-1,a,c,b)#將 N-1 個圓盤從A移動到B (A C B)
6 print(a,'-->',c) 將最大的圓盤從A直接移動到C (A C)因為不需要任何緩沖,直接移過去,所以是沒有緩沖柱
7 move(n-1,b,a,c) 將 N-1 個圓盤從B移動到C (B A C)
為了講解清楚,我給代碼標記了行號。
①如果圓盤只有1,那就隨便移動,直接把A移動到C, A->C
②就是圓盤數量不是1的時候,代碼中第四行開始。在講之前,我們看第三行代碼
print(a,'-->',c)
我們可以看到,在代碼實現中A直接移動到C,是(a ‘>’ c)
我們在看第⑤行代碼,意思是A移動B,那么代碼就是(A B)A指向B
move(n-1,a,c,b)
就是A在左,B在最后,緩沖柱就在中間,大家可以觀察觀察是不是這樣,到底是怎么做緩沖的,大家可以把這三個柱子想象成我前面說的一個圓圈
舉個例子哦,如果C移動到B,那么就是(C A B )C在左 B在右 中間是緩沖柱,現在一想就很清楚了。
代碼+運行結果