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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python中汉诺塔如何理解_python汉诺塔问题的递归理解

發(fā)布時(shí)間:2023/12/29 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中汉诺塔如何理解_python汉诺塔问题的递归理解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、問題背景

漢諾塔問題是源于印度一個(gè)古老傳說。

源于印度一個(gè)古老傳說的益智玩具。大梵天創(chuàng)造世界的時(shí)候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。并且規(guī)定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動(dòng)一個(gè)圓盤。

簡(jiǎn)單來說目的就是要我們把盤子按照規(guī)則從A移到C

二、思路

此處我用遞歸的思想理解漢諾塔問題。遞歸的思想容易理解,但是運(yùn)用在代碼上的算法并不是解決漢諾塔問題的最佳算法。

我們初定有n個(gè)盤子,把三個(gè)盤子從左到右分別標(biāo)為A,B,C。

我們先思考,如果只有一個(gè)盤子放在A柱,要移動(dòng)到C,應(yīng)該A-->C

(1)首先根據(jù)大的盤子在下,小的盤子在上的目標(biāo),我們倒著想,想到要移動(dòng)A最下面的盤子。要把A最下面的盤子移動(dòng)到C,首先要把前n-1個(gè)盤子移動(dòng)到B

(2)然后可以把第n盤從A移動(dòng)到C了

之后我們把B柱位置與A柱位置互換,我們可以發(fā)現(xiàn)忽略C中的盤子后,問題變?yōu)榱薾-1個(gè)盤子的漢諾塔問題

之后我們可以重復(fù)以上步驟,直至問題化為單一的盤子移動(dòng)(從A到C)。

三、python代碼

此處我編寫了一個(gè)hanoi函數(shù)和move函數(shù)去顯示n個(gè)盤子的運(yùn)動(dòng)軌跡

n=eval(input())

def move(p,q):

print(p,'-->',q)

def hanoi(n,a,b,c):

if n==1:

move(a,c)

else:

hanoi(n-1,a,c,b)

move(a,c)

hanoi(n-1,b,a,c)

hanoi(n,'A','B','C')

四、效果

5個(gè)盤子的移動(dòng)軌跡顯示

總結(jié)

以上是生活随笔為你收集整理的python中汉诺塔如何理解_python汉诺塔问题的递归理解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。