今天小編給大家分享一下怎么使用Python實(shí)現(xiàn)漢諾塔問題的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了淳安免費(fèi)建站歡迎大家使用!
漢諾塔問題是一個(gè)經(jīng)典的問題。漢諾塔(Hanoi Tower),又稱河內(nèi)塔,源于印度一個(gè)古老傳說。大梵天創(chuàng)造世界的時(shí)候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。并且規(guī)定,任何時(shí)候,在小圓盤上都不能放大圓盤,且在三根柱子之間一次只能移動(dòng)一個(gè)圓盤。問應(yīng)該如何操作?
我自己的理解就是:將自身的問題不斷減小規(guī)模,直到減小到無法減小為止。(到達(dá)遞歸結(jié)束條件)然后從小問題開始解決,小問題逐個(gè)解決之后,大問題也就迎刃而解了(遞歸回來了)
原問題不斷減小為規(guī)模更小的原問題,然后小規(guī)模的原問題解決了,從而解決原來的大問題!
減小規(guī)模、從小解決、遞歸回來、解決原問題!??!
(1)有遞歸結(jié)束條件。
(2)不斷調(diào)用自身,減小問題規(guī)模,向遞歸結(jié)束條件靠攏。
有三根柱子,分別名為A,B,C。初始時(shí),在柱子A上有n個(gè)圓盤,他們從下到上,盤子的大小是從大到小。在移動(dòng)和擺放的過程中,小盤子必須在大盤子上面。 在保證規(guī)則的情況下,將柱子A上的所有盤子,移動(dòng)到柱子C,移動(dòng)中可以借助柱子B,但是得保證移動(dòng)過程中小盤子必須得在大盤子上?。?! 請打印出移動(dòng)過程?
(1)將最上面的n-1個(gè)盤子,從A借助C移動(dòng)到B
(2)將最下面的一個(gè)盤子,從A移動(dòng)到C
(3)將最上面的n-1個(gè)盤子,從B借助A移動(dòng)到C
遞歸的結(jié)束條件:
問題規(guī)模變成盤子數(shù)為0時(shí),因?yàn)楫?dāng)盤子數(shù)為0時(shí)就不需要移動(dòng)了?。?!
# coding:utf-8 """ n為初始時(shí)A柱上的盤子數(shù) a為起始盤子所在的柱子 b為中轉(zhuǎn)柱子 c為目的地柱子 """ def hanoi(n, a, b, c): if n > 0: hanoi(n-1, a, c, b) print("盤子從%s移動(dòng)到%s" % (a, c)) hanoi(n-1, b, a, c) hanoi(3, "A", "B", "C")
以上就是“怎么使用Python實(shí)現(xiàn)漢諾塔問題”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。