遞迴——漢諾塔問題(python實現)

來源:互聯網
上載者:User

標籤:目的   開始   參數   問題   直接   else   調用   第一個   中轉   

規則
  1. 每次移動一個盤子
  2. 任何時候大盤子在下面,小盤子在上面
方法

假設共n個盤子

  • 當n=1時:
    1. 直接把A上的一個盤子移動到C上(A->C)
  • 當n=2時:
    1. 把小盤子從A放到B上(A->B)這裡開始採用參數,rsc源地址=A,dst目的地址=B
    2. 把大盤子從A放到C上( A->C)rsc=A, dst=C
    3. 把小盤子從B放到C上(B->C)rsc=B, dst=C
  • 當n=3時:
    1. 把A上的兩個盤子,通過C移動到B上去, 調用遞迴實現(A-C->B)rsc=A, trans中轉=C, dst=B
    2. 把A上剩下的一個最大盤子移動到C上(A->C)rsc=A, dst=C
    3. 把B上兩個盤子,藉助於A,挪到C上去, 調用遞迴(B-A->C)rsc=B, trans=A, dst=C
  • 當n=n時:

    1. 把A上的n-1個盤子,藉助於C,移動到B上去,調用遞迴(A-C->B)rsc=A, trans=C, dst=B

    2. 把A上的最大一個盤子,移動到C上(A->C)rsc=A, dst=C

    3. 把B上n-1個盤子,藉助於A,移動到C上, 調用遞迴(B-A->C)rsc=B, trans=A, dst=C

每次都是先將其他圓盤移到輔助柱子上,再將最底下的移到C,然後再把原先柱子作為輔助柱子,重複

代碼實現
def move(n, a, b, c):'''漢諾塔的遞迴實現n:代表幾個盤子a:代表第一個塔,rscb:代表第二個塔,transc:代表第三個塔, dst'''    if n == 1:        print(a, '=>', c)    else:        move(n-1, a, c, b)        print(a, '=>', c)        move(n-1, b, a, c)

遞迴——漢諾塔問題(python實現)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.