[Python]遞歸函數-理解漢諾塔

  • 2020 年 3 月 10 日
  • 筆記

原創文章

原文鏈接:https://blog.csdn.net/humanking7/article/details/90697845


文章目錄

  • @[toc]

  • 1. 程式碼及結果
    • 1.1. Python文件程式碼
    • 1.2. 顯示結果
  • 2.理解
  • 3. 新加程式碼

Python的遞歸函數-理解漢諾塔

1. 程式碼及結果

1.1. Python文件程式碼

# 利用遞歸函數移動漢諾塔:  def move(n, a, b, c):      if n == 1:          print('move', a, '-->', c)      else:          move(n-1, a, c, b)  # 先把A號樁當做起點樁,B號樁當做終點樁,C號樁當做中間樁,移動A號樁上面n-1個盤子到B號樁          move(1, a, b, c)  # 然後把A號樁剩下的最後一個盤子移動到C號樁          move(n-1, b, a, c)  # 最後把B號樁當做起點樁,A號樁當做中間樁,把n-1個盤子移動到C號樁(終點樁)    if __name__ == "__main__":      move(3, 'A', 'B', 'C')

1.2. 顯示結果

move A --> C  move A --> B  move C --> B  move A --> C  move B --> A  move B --> C  move A --> C

2.理解

其實不要想那麼複雜,按照「塊」的思想,先把上面(n-1)塊盤子當做一個盤子,然後再來思考,我用下面的一幅圖來告訴大家,其實真的不要想太多。

3. 新加程式碼

加上一行程式碼估計會更加好理解程式碼的流程。

# 利用遞歸函數移動漢諾塔:  def move(n, a, b, c):      global g_n      if n == 1:          g_n = g_n + 1          print(g_n, ' move', a, '-->', c)      else:          move(n-1, a, c, b)  # 先把A號樁當做起點樁,B號樁當做終點樁,C號樁當做中間樁,移動A號樁上面n-1個盤子到B號樁          move(1, a, b, c)  # 然後把A號樁剩下的最後一個盤子移動到C號樁          move(n-1, b, a, c)  # 最後把B號樁當做起點樁,A號樁當做中間樁,把n-1個盤子移動到C號樁(終點樁)    if __name__ == "__main__":      g_n = 0      move(5, 'A', 'B', 'C')
1  move A --> C  2  move A --> B  3  move C --> B  4  move A --> C  5  move B --> A  6  move B --> C  7  move A --> C  8  move A --> B  9  move C --> B  10  move C --> A  11  move B --> A  12  move C --> B  13  move A --> C  14  move A --> B  15  move C --> B  16  move A --> C  17  move B --> A  18  move B --> C  19  move A --> C  20  move B --> A  21  move C --> B  22  move C --> A  23  move B --> A  24  move B --> C  25  move A --> C  26  move A --> B  27  move C --> B  28  move A --> C  29  move B --> A  30  move B --> C  31  move A --> C