def?move(n,?a,?b,?c):
????if?n==1:
????????print?a,'-->',c
????????return
????else:
????????move(n-1,a,c,b)
????????print?a,'-->',c
????????move(n-1,b,a,c)
move(4,?'A',?'B',?'C')本人小白,這個(gè)遞歸困惑了好久,今天自己回答一下,不知我自己的理解是否正確,請大神們指點(diǎn)?。?!The first----在向上面大神請教之后,我自己仔細(xì)研究了這個(gè)Python漢諾塔,假設(shè)為3個(gè)盤子的情況做的解析!其實(shí)每一次都是一次循環(huán),當(dāng)n=3,借助B移動(dòng)到C,直接移動(dòng)3個(gè)肯定不行,要首先執(zhí)行A柱上面的2(3-1)個(gè),要把他們移到B上,再把A最后一個(gè)大盤子移到C柱,最后把B上的2個(gè)移到C,完工,這其實(shí)類似于把大象關(guān)冰箱要幾步一樣。The second----好了,那么首先A上的2個(gè)移到B要借助C,這就是(2,A,C,B)即A借助C移到B,那么這2(3-1)個(gè)直接移動(dòng)也不行?。≡倮^續(xù)分解,這2個(gè)先移動(dòng)1個(gè),先把1個(gè)(2-1)先移動(dòng)到C,因?yàn)橛?個(gè)柱子,所以規(guī)規(guī)矩矩寫法(1,A,B,C),到這估計(jì)就會(huì)產(chǎn)生疑問,代碼不是A到C再到B,這怎么(1,A,B,C)?但是實(shí)際上,這里A,B,C角色已經(jīng)互換,這里的A還是那個(gè)A,這里的B其實(shí)就變成了代碼里的C了,這里的C變成代碼里的B了,屁屁這么多,這一步的實(shí)際操作只是A-->C,所以又有了下面printA-->C,通過這一步這1個(gè)盤子已經(jīng)在C上。The third----然后,A柱子上還有2個(gè),這時(shí)候和上面一樣,先移動(dòng)最上面的1個(gè),自己演示過的肯定知道要放到B位置,這里又要注意了,實(shí)際上這里參數(shù)又發(fā)生角色互換,這里的B已然已經(jīng)代表了''C'',所以又契合了printA-->C,這個(gè)時(shí)候還有一步,把剛剛那1個(gè)小盤子放到這一步這個(gè)盤子上面,這一步其實(shí)是(1,C,A,B),實(shí)際操作就一步,C-->B,這里已然是角色互換呼應(yīng)printA-->C。至此,第一大步已完成,2個(gè)在B上,第三大步把A最后一個(gè)大盤子移到C,printA-->C(其實(shí)就是把大象塞進(jìn)去這一步)。LAST:剩下的其實(shí)就和上面第一大步一樣,但注意的是,角色也是全部變了。綜上所述,本人總結(jié),其實(shí)所謂的A,B,C命名三個(gè)柱子,只是命個(gè)名,方便操作,但千萬不能形成慣性思維,這里的A,B,C變化多端。為了闡述這些,我做了一個(gè)圖,畫的比較凌亂!我自己看懂,不知道各位看不看懂。。。。最后請各位大神指出我的錯(cuò)誤/不足之處,本人小白,不勝感激?。?!
添加回答
舉報(bào)
0/150
提交
取消