漢諾塔的移動--python遞歸實現


漢諾塔的移動--python遞歸實現

參數n為漢諾塔要移動的初始層數。a, b, c 為對應的柱子

方法如下

def move(n, a, b, c):
    if n == 1:
        print(a, '--->', c)
    else:
        move(n-1, a, c, b)
        move(1, a, b, c)
        move(n-1, b, a, c)


move(3, A, B, C)

 

分析: 

  a1,a2,a3...為對應的塔

  如果n=1時,即就一層時,就只需要將a1從A移動C就可以了

  當n=2時, move(n-1, a, c, b)  就將最上層(a1)從A移動到B

       move(1, a, b, c) 將A的最后一個(a2)移動到C

       move(n-1, b, a, c) 將之前移動到B的最上層(a1)移動到C

       完成

  當n=3時,move(n-1, a, c, b)  會回溯調用兩次 因為 n-1為2 判斷還是不通過時:

          n=2;方法參數為m(2,A,C,B),再次調用

          move(n-1, a, c, b) 將a1從A移動到C

          move(1, a, b, c) 將的a2從A移動B

          move(n-1, b, a, c) 將a1從C移動B

          完成當前調用退到上層

       move(1, a, b, c) 將A的最后一個(a3)移動到C

       move(n-1, b, a, c) 也會回溯兩次,n-1為2 判斷不通過

          n=2時,此時方法參數為 m(2, A, B, C),再次調用

          move(n-1, a, c, b) 將a1從 B移動到 A

          move(1, a, c, b) 將a1從 B移動到 C

          move(n-1, b, a, c) 將a1從 A移動到 C

          完成當前調用退到上層

      循環完成

 


免責聲明!

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



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