通過這個又加深了對遞歸函數(shù)的理解
題目為:
- 編寫move(n, a, b, c)函數(shù),它接收參數(shù)n扰付,表示3個柱子A颊埃、B、C中第1個柱子A的盤子數(shù)量牧抵,然后打印出把所有盤子從A借助B移動到C的方法
思路:
1. 先不想如何實現(xiàn)move函數(shù)笛匙,假設move函數(shù)已經(jīng)定義好了,而且可以完成以上功能犀变。
2. 將n個盤子想象成兩部分妹孙,最上面的n-1個盤子為一體,最下面的大個1為一體
3. 在這種情況下获枝,將n-1部分移到蠢正,目標位置就很
容易實現(xiàn):
- 先將上面n-1部分放入,中間位置緩存區(qū)
- 將下面1部分放入 終點位置
- 將緩存區(qū)位置的n-1放入c上
完成省店!
那具體怎么實現(xiàn)嚣崭?
我們先利用假設已經(jīng)完成的move()方法來實現(xiàn)
- move(n-1,a,c,b) 上面n-1部分放入笨触,中間位置緩存區(qū)
- move(1,a,b,c) 下面1部分放入 終點位置
- move(n-1,b,a,c) 將緩存區(qū)位置的n-1放入c上
這樣就把n個盤子都放入了指定柱子
那我們的函數(shù)就可以這樣定義:
def move(n,a,b,c): if n==1: print('%s-->%s'%(a,c)) return move(n-1,a,c,b)#使用假設的方法 move(1,a,b,c) move(n-1,b,a,c)
雖然還是有點糾結,但是通過這種方法也算是對遞歸有了新了解