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

歡迎訪問 生活随笔!

生活随笔

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

python

汉诺塔递归问题的分析与Python实现

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

背景

相傳在古印度圣廟中,有一種被稱為漢諾塔(Hanoi)的游戲。該游戲是在一塊銅板裝置上,有三根桿(編號A、B、C),在A桿自下而上、由大到小按順序放置64個金盤(如圖)。游戲的目標(biāo):把A桿上的金盤全部移到C桿上,并仍保持原有順序疊好。操作規(guī)則:每次只能移動一個盤子,并且在移動過程中三根桿上都始終保持大盤在下,小盤在上,操作過程中盤子可以置于A、B、C任一桿上。

分析

(1)當(dāng)A桿上有一塊銅板時,直接將其移動到C桿上即可;

(2)當(dāng)A桿上有兩塊銅板時,將較小的那塊移動到B桿上,再將較大的那塊移動到C桿上(即與(1)相同),最后再將B桿上的那塊移動到C桿上即可;

(3)當(dāng)A桿上有三塊銅板時,將A桿上方的兩塊銅板看成一個整體,要想實現(xiàn)目標(biāo),需要將這個整體一起移動到B桿上(即與(2)相同),再將A桿最下方的銅板移動到C桿上,最后再將B桿上的兩塊銅板移動到C桿上;


以此類推,當(dāng)A桿上有n塊銅板時,將A桿上方的(n-1)塊銅板看成一個整體,一起移動到B桿上,而這就是A桿上有(n-1)塊銅板的目標(biāo)。

假設(shè)hanoi(n, from_, with_, to_)是一個函數(shù),表示n塊銅板從from_桿上借助于with_桿移動到to_桿上,那么該函數(shù)需要實現(xiàn):
- 將A桿上方(n-1)塊銅板借助于C桿移動到B桿,即hanoi(n-1,A,C,B),調(diào)用hanoi()函數(shù)自身;
- 將A桿上最后一塊銅板移動到C桿,直接移動即可;
- 將B桿上(n-1)塊銅板借助于A移動到C桿,即hanoi(n-1,B,A,C),調(diào)用hanoi()函數(shù)自身。
這種為了解決問題,重復(fù)地將問題分解為同類的子問題的方法就叫遞歸。

代碼實現(xiàn)

python標(biāo)準(zhǔn)庫turtle自帶漢諾塔例子(${PYTHON_HOME}/Lib/turtledemo/minimal_hanoi.py),主要遞歸代碼如下:

def hanoi(n, from_, with_, to_):if n > 0:hanoi(n-1, from_, to_, with_)to_.push(from_.pop())hanoi(n-1, with_, from_, to_)

當(dāng)有6層銅板時,效果如下:

總結(jié)

以上是生活随笔為你收集整理的汉诺塔递归问题的分析与Python实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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