Python之汉诺塔
生活随笔
收集整理的這篇文章主要介紹了
Python之汉诺塔
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 前言
- 一、漢諾塔是什么?
- 二、代碼演示
- 1.遞歸
- 總結
前言
我印象中我的JAVA教學中教遞歸使用了兩個例子,一個是前面說過的斐波那契數列,而另一個也是很有名氣的漢諾塔問題,現在Python也用這兩個問題來演示遞歸
一、漢諾塔是什么?
漢諾塔是在一塊銅板裝置上,有三根桿(編號A、B、C),在A桿自下而上、由大到小按順序放置一定數量的金盤,把A桿上的金盤全部移到C桿上,并仍保持原有順序疊好。操作規則:每次只能移動一個盤子,并且在移動過程中三根桿上都始終保持大盤在下,小盤在上,操作過程中盤子可以置于A、B、C任一桿上
二、代碼演示
1.遞歸
def hanoi(n, x, y, z):if n == 1:print(x, '-->', z)else:hanoi(n - 1, x, z, y)print(x, '-->', z)hanoi(n - 1, y, x, z)if __name__ == '__main__':n = int(input("請輸入漢諾塔的層數:"))hanoi(n, "X", "Y", "Z")代碼其實很簡單,只是這個邏輯不太好理解,以下僅是個人理解(假設有64個盤子):
(1)將前63個盤子從A移動到B上,確保大盤在小盤下面;
(2)將最底下的第64個盤子從A上移動到C上;
(3)將B上的63個盤子移動到C上
由此就會有兩個新的問題:
問題一:將A上的63個盤子借助C移動到B上
問題二:將B上的63個盤子借助A移動到C上
這樣的話,這兩個問題又可以拆解為:
問題一:(1)將前62個盤子從A移動到C上,確保大盤在小盤下;(2)將最底下的第63個盤子移動到B上,將C上的62個盤子移動到B上
問題二也是這樣的思路
總結
遞歸,就是方法自己調自己,遞歸有兩個條件:調用函數自身;設置了正確的返回條件。
條件一,可以說是遞歸的核心;條件二,是遞歸的結束判斷,一旦沒有返回條件,遞歸就會陷入死循環
總結
以上是生活随笔為你收集整理的Python之汉诺塔的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3D姿态估计(GAST)
- 下一篇: 大数据经历了40年的发展,传统数据和网络