日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python汉诺塔问题输入层数输出整个移动流程_python实现汉诺塔方法汇总

發布時間:2025/3/12 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python汉诺塔问题输入层数输出整个移动流程_python实现汉诺塔方法汇总 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習python遇到的第一個問題:漢諾塔問題的實現。首先是不知道什么是漢諾塔問題,然后是不知道怎么實現。于是百度了下,結果如下:

漢諾塔:漢諾塔(又稱河內塔)問題是源于印度一個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。并且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤

方法一:

def move(n,a,b,c) # n=2

if n==1 : # 跳過

print a,'-->',c

return None

move(n-1,a,c,b) # n=2,執行n-1后,move(n-1,a,c,b)->move(1,a,c,b),跳到if處,執行print:a-->b

print a,'-->',c # 執行print,這里的a和c是指定義的函數的參數a和c,打印結果是:a-->c

move(n-1,b,a,c) # n=1 ,執行n-1后,跳到if處,執行print,此時,a=b,c=c,結果是:b-->c

move(2,'a','b','c')

方法二:

def printMove(fr,to):

print 'move from ' + str(fr) + ' to ' + str(to)

def Towers(n,fr,to,spare):

if n == 1:

printMove(fr,to)

else:

Towers(n-1,fr,spare,to)

Towers(1,fr,to,spare)

Towers(n-1,spare,to,fr)

方法三:

def hanoi(n,x,y,z):

if n==1:

print(x,'-->',z)

else:

hanoi(n-1,x,z,y)#將前n-1個盤子從x移動到y上

hanoi(1,x,y,z)#將最底下的最后一個盤子從x移動到z上

hanoi(n-1,y,x,z)#將y上的n-1個盤子移動到z上

n=int(input('請輸入漢諾塔的層數:'))

hanoi(n,'x','y','z')

總結下:

# 漢諾塔思想筆記

# 認識漢諾塔的目標:把A柱子上的N個盤子移動到C柱子

# 遞歸的思想就是把這個目標分解成三個子目標

# 子目標1:將前n-1個盤子從a移動到b上

# 子目標2:將最底下的最后一個盤子從a移動到c上

# 子目標3:將b上的n-1個盤子移動到c上

# 然后每個子目標又是一次獨立的漢諾塔游戲,也就可以繼續分解目標直到N為1

總結

以上是生活随笔為你收集整理的python汉诺塔问题输入层数输出整个移动流程_python实现汉诺塔方法汇总的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。