漢諾塔的遞歸算法


這個是從新浪博客遷移到這里的http://blog.sina.com.cn/s/blog_1a566a7db0102zl3l.html

參考鏈接(轉載請注明出處):https://dmego.me/2016/10/16/hanoi.html

一、漢諾塔是什么?
漢諾塔(又稱河內塔)問題是源於印度一個古老傳說的益智玩具。大梵天創造世界的時候做了三根 金剛石柱子,在一根柱子上從下往上按照大小順序摞着64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。(來自百度百科)
 
key:三根柱子!一次只能移動一個!小圓盤上不能放大圓盤!
 
二、算法分析
漢諾塔的遞歸算法來自百度
  • 先分析尋找規律
(n==1)
a→c
(n==2)
a→b
a→c
b→c
漢諾塔的遞歸算法來自百度
(n==3)
a→c
a→b
c→b
a→c
b→a
b→c
a→c
  • 總結規律
中間的操作是把最大的那個盤子從a移到空着的c上
中間操作上面的所有操作可以看成是把n-1個盤子以漢諾塔的方式從a移到b(輔助塔c)
中間操作下面的所有操作可以看成是把n-1個盤子以漢諾塔的方式從b移到c(輔助塔a)
  • 結合為算法
遞歸算法(Python)
def hanoi(n,a,b,c):  #n個盤子,abc三個柱子,實習漢諾塔a到c
if n == 1:
    print(a,’→’,c)
else:
    hanoi(n-1,a,c,b)   #把n-1個盤子以漢諾塔的方式從a移到b(輔助塔c)
    hanoi(1,a,b,c)   #把最大的那個盤子從a移到空着的c上
    hanoi(n-1,b,a,c)   #把n-1個盤子以漢諾塔的方式從b移到c(輔助塔a)
      
程序步驟圖解
漢諾塔的遞歸算法
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM