漢諾塔遞歸算法圖解 漢諾塔的遞歸算法不理解?
漢諾塔的遞歸算法不理解?讓河內(nèi)塔板為D1、D2、D3,。。。DN從上到下,(n>0)記住,前k個板是s(k)(k>1)遞歸。假設(shè)前n-1個板是s(n-1)。要把板從a移到C,我們只需要使用橋B
漢諾塔的遞歸算法不理解?
讓河內(nèi)塔板為D1、D2、D3,。。。DN從上到下,(n>0)記住,前k個板是s(k)(k>1)遞歸。假設(shè)前n-1個板是s(n-1)。要把板從a移到C,我們只需要使用橋B。具體的移動方法如下:(1)s(n-1):a=>B(2)DN:a=>C(3)s(n-1):B=>C實際上是一個有四個參數(shù)f(n,a,B,C)的函數(shù)。第一步和第三步實際上又回到了n-1層河內(nèi)塔的問題。以第一步為例,將前n-2個板看作一個整體s(n-2),問題變成將板從a移到B,此時需要以C為橋。移動方法如下:(4)s(n-2):a=>C(5)d(n-1):a=>B(6)s(n-2):a=>C(5)d(n-1):a=>B(6)s(n-2):s(n-1):a=>C實際上,C=>B和(1)、(2)、(3)的步驟沒有區(qū)別,只是[bridge]B和C被交換:通過(1)、(2)、(3)總結(jié)函數(shù):(1)f(n-1,a,C,B)//參數(shù)a是原始位置,C是橋,B是目的地(2)n:a=>C//從原始位置取底板=>目的地(3)f(n-1,B,a,C)//參數(shù)B是原始位置,a是橋,C是目的地。遞歸解很容易理解。更困難的是使用非遞歸方法。實際上,所有的遞歸算法都可以轉(zhuǎn)化為非遞歸算法。一些低級語言(如匯編)沒有遞歸算法。
如何理解漢諾塔遞歸?
河內(nèi)塔可以理解為移動塔的游戲,移動n層塔從一個支柱到另一個
2。這是河內(nèi)塔的遞歸原型,漢諾塔(n,a,c)-n層塔從一根柱子移動到c柱;每次你必須返回到這個原型,它被認(rèn)為是遞歸完成
!3. 在中間B柱的幫助下,河內(nèi)塔的原型被寫為hunnuota(n,a,B,c)-n層塔在B柱的幫助下從a柱移動到c柱,這應(yīng)該被理解;
4。遞歸需要一個出口,這是控制條件。當(dāng)n=1時,塔可以直接從a移到C,C是出口
5。當(dāng)n>1時,這一步是理解漢諾塔遞歸的關(guān)鍵,它必須形成n-1層移到C柱的形式,可分為三步:
A.如果n層不能同時移動,可以理解為先將A上面的n-1層移到B柱
Ba柱,塔的剩余n層移到C柱,
C,然后在B列上形成n-1層移動到C列——
遞歸完成