python求解漢諾塔游戲
本文實(shí)例為大家分享了python求解漢諾塔游戲的具體代碼,供大家參考,具體內(nèi)容如下
一、問題定義
百度百科定義:漢諾塔(又稱河內(nèi)塔)問題是源于印度一個(gè)古老傳說的益智玩具。據(jù)說大梵天創(chuàng)造世界的時(shí)候做了三根金剛石柱子,在一根柱子上從下往上按照從小到大順序摞著64片黃金圓盤。大梵天命令婆羅門借助其中一根柱子,把64片黃金圓盤重新擺放到第三個(gè)根柱子上。并且規(guī)定,在小黃金圓盤上不能放大的黃金圓盤,在三根柱子之間一次只能移動(dòng)一個(gè)圓盤。
例如,如果黃金圓盤只有3片,則為了滿足游戲規(guī)則,那么必須按照如下圖所示的8個(gè)步驟完成:

二、代碼實(shí)現(xiàn)
# 將n個(gè)盤子借助y柱從x柱移動(dòng)到z柱
def hanoi(n, x, y, z):
count = 0
if n == 1: # 遞歸出口
print(x, ' --> ', z)
return 1
else:
# 將前n - 1個(gè)盤子借助z柱從x柱移動(dòng)到y(tǒng)柱上
count += hanoi(n - 1, x, z, y) # 遞歸調(diào)用
# 將最底下的1個(gè)盤子從x柱移動(dòng)到z柱上
count += hanoi(1, x, y, z)
# 將n - 1個(gè)盤子借助x柱從y柱移動(dòng)到z柱上
count += hanoi(n - 1, y, x, z) # 遞歸調(diào)用
return count
def main():
hanoi_level = input("請輸入漢諾塔層數(shù):")
print("總共移動(dòng)次數(shù)為%d" % hanoi(int(hanoi_level), 'X', 'Y', 'Z'))
if __name__ == '__main__':
main()
當(dāng)黃金圓盤為4層時(shí),代碼的輸出結(jié)果為:
請輸入漢諾塔層數(shù):4 X --> Y X --> Z Y --> Z X --> Y Z --> X Z --> Y X --> Y X --> Z Y --> Z Y --> X Z --> X Y --> Z X --> Y X --> Z Y --> Z 總共移動(dòng)次數(shù)為15
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python中g(shù)eopandas庫安裝出現(xiàn)各種問題的解決辦法
這篇文章主要介紹了關(guān)于python中g(shù)eopandas庫安裝出現(xiàn)各種問題的解決辦法,總結(jié)了在Windows下兩種安裝geopandas庫的方法,方法一是在新環(huán)境下使用conda命令安裝,方法二通過離線安裝GDAL、Fiona、Pyproj、Rtree、Shapely五個(gè)庫,再用pip安裝geopandas,需要的朋友可以參考下2024-11-11
關(guān)于Matplotlib繪制動(dòng)態(tài)實(shí)時(shí)曲線的方法改進(jìn)指南
這篇文章主要給大家介紹了關(guān)于Matplotlib繪制動(dòng)態(tài)實(shí)時(shí)曲線的相關(guān)資料,matplotlib是python里最popular的畫圖工具,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-06-06
Python實(shí)現(xiàn)mysql數(shù)據(jù)庫更新表數(shù)據(jù)接口的功能
這篇文章主要給大家介紹了關(guān)于Python如何實(shí)現(xiàn)mysql數(shù)據(jù)庫更新表數(shù)據(jù)接口功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11
python中的PywebIO模塊制作一個(gè)數(shù)據(jù)大屏
這篇文章主要介紹了python中的PywebIO模塊制作一個(gè)數(shù)據(jù)大屏,一個(gè)制作數(shù)據(jù)大屏的工具,非常的好用,100行的Python代碼就可以制作出來一個(gè)完整的數(shù)據(jù)大屏,并且代碼的邏輯非常容易理解,需要的朋友可以參考一下2022-03-03
python并發(fā)編程多進(jìn)程之守護(hù)進(jìn)程原理解析
這篇文章主要介紹了python并發(fā)編程多進(jìn)程之守護(hù)進(jìn)程原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
利用python數(shù)據(jù)分析處理進(jìn)行炒股實(shí)戰(zhàn)行情
這篇文章主要介紹了利用python數(shù)據(jù)分析進(jìn)行炒股實(shí)戰(zhàn)行情,本文主要介紹三部分:數(shù)據(jù)采集,數(shù)據(jù)預(yù)處理,利用SVM算法進(jìn)行建模,本文僅供參考借鑒2021-08-08
python 讀寫txt文件 json文件的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄猵ython 讀寫、創(chuàng)建 文件的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-10-10
Pytorch中關(guān)于nn.Conv2d()參數(shù)的使用
這篇文章主要介紹了Pytorch中關(guān)于nn.Conv2d()參數(shù)的使用,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06

