本題對遞歸函數move(n, a, b, c)?的定義為:將 n 個圓盤從 a 借助 b 移動到 c。因為無法直接從n階開始計算。從而要進行遞推到可以直接解決的問題規模。即有遞歸邊界n==1。當n==1時,可以直接得出結果并打印(print a+'-->',c),此時遞推結束。而剩下的n-1個沒移動的盤,就可以根據遞歸函數move的定義有move(n-1,a,c,b),即為,將 n-1 個圓盤從 a 借助 c 移動到 b。然后再將b上的盤子進過類似的操作進a移到c,即為move(n-1,b,a,c)。
2018-09-12
不是在定義函數嗎?為什么感覺在直接使用這個函數,里面有一個默認移動方式,就是1號位借助2號位將n-1個漢諾塔移動到3號位 。這個就是直接使用 沒有去定義這個默認方式呀 是我理解的有問題嘛 請大神給講一下?
2018-09-07
這個的意思是說,你移動的軌跡是什么,然后你把你表示的移動的路線和你移動的數量表示出來就行了
2018-08-26
遞歸定義
遞歸包括遞歸體和遞歸邊界,是對大問題進行分制,從而分解到到可以解決的規模,運行過程為先遞推再回歸。
遞推流程
本題對遞歸函數move(n, a, b, c)?的定義為:將 n 個圓盤從 a 借助 b 移動到 c。因為無法直接從n階開始計算。從而要進行遞推到可以直接解決的問題規模。即有遞歸邊界n==1。當n==1時,可以直接得出結果并打印(print a+'-->',c),此時遞推結束。而剩下的n-1個沒移動的盤,就可以根據遞歸函數move的定義有move(n-1,a,c,b),即為,將 n-1 個圓盤從 a 借助 c 移動到 b。然后再將b上的盤子進過類似的操作進a移到c,即為move(n-1,b,a,c)。
回歸流程
而回歸是程序內部自動進行的,則不需手動操作(當然也可以通過手工棧的方式,自己模擬遞歸過程)??梢栽凇稊祿Y構》和《算法設計與分析》上參考詳細解釋。
2018-08-25
move(n,a,b,c)你可以理解為有n個漢諾塔,從a借助b移動到c
不管有多少個漢諾塔,基本的思路是n-1個漢諾塔先從a借助c移動到b,剩下最底的漢諾塔直接從a移動到c,再把剩下的n-1個漢諾塔從b借助a移動到c
當n=1時,就是最底的漢諾塔直接從a移動到目標的c
move(n-1,a,c,b)n-1個漢諾塔先從a借助c移動到b
move(n-1,b,a,c)n-1個漢諾塔從b借助a移動到c
題目中‘A’‘B’‘C’是三根桿的名字而已