亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

python實現漢諾塔遞歸算法經典案例

2020-01-04 17:27:32
字體:
來源:轉載
供稿:網友
這篇文章主要大家分享了python實現漢諾塔遞歸算法經典案例,感興趣的小伙伴們可以參考一下
 

    學到遞歸的時候有個漢諾塔的練習,漢諾塔應該是學習計算機遞歸算法的經典入門案例了,所以本人覺得可以寫篇博客來表達一下自己的見解。這markdown編輯器還不怎么會用,可能寫的有點格式有點丑啦,各位看官多多見諒. 
 網上找了一張漢諾塔的圖片,漢諾塔就是利用用中間的柱子把最左邊的柱子上的圓盤依次從大到小疊上去,說白了就是c要跟原來的a一樣 

python,漢諾塔遞歸算法

廢話少說,先亮代碼

def move(n, a, buffer, c):  if(n == 1):    print(a,"->",c)    return  move(n-1, a, c, buffer)  move(1, a, buffer, c)  move(n-1, buffer, a, c)move(3, "a", "b", "c")

  首先是定義了一個移動的函數,四個參數分別代表,a柱上的盤子個數,buffer也就是b柱,命名為buffer便于理解,顧名思義就是一個a移動到c的緩沖區.然后c就是目標柱子 
下面我們來讀函數代碼 
 遞歸的一般寫法,肯定有個中止遞歸循環的條件,所以在判斷a柱上的盤子個數為1的時候既可以中止遞歸并返回,a柱上面只有一個的時候肯定就是把a移動到c了,重點是下面的代碼,遞歸其實是一種很抽象的算法,我們要利用抽象思維去想漢諾塔這個問題,把a柱上的盤子想成兩份,就是上面的盤子和最底下的盤子,如果所示 

python,漢諾塔遞歸算法

 我們不關心上面的盤子到底有幾個,我們每次的操作就是把最底下的盤子通過緩沖區 b柱 buffer 移動到c柱。 
 童鞋們肯定在想為啥要醬紫移動呢,其實這是一種總結歸納吧,你自己玩一下漢諾塔游戲就會發現規律,其實這個游戲就是不停的把上面的所有的想方設法的移到b上,然后把a最后最大的那個弄到c,然后再絞盡腦汁的把b上的移動到c,這時候你就發現,原來b上的也要先通過空的也就是a來存放當前b上面的n-1個,然后把b的最大最后的移動到c,這里規律就體現出來了,也可以抽象出移動的方法,并可以以此設計出程序算法. 

 以下我們來利用剛才的抽象思維解讀剩余代碼

move(n-1, a, c, buffer)

這段代碼就是表示把剛才所說的a柱的上面的n-1個,通過c按照從小到大的規則先移動到緩沖區buffer。此函數進入遞歸。

move(1, a, buffer, c)

當上面的語句執行完成,也就是n-1個盤子的遞歸移動完成之后,執行此語句,就是把a柱上的一個盤子移動到c,也就是所謂的最底下的盤子

move(n-1, buffer , a, c)

最后一步,就是剛才把a上面的n-1個都移動到了buffer上面,肯定要通過a移動到c才能完成整個漢諾塔的移動啊,于是最后一步自然是把剛才的n-1個通過a當緩沖區移動到c柱上. 
 我來寫下整個移動流程,以a柱上有3個為例子

/**我把3個盤子的漢諾塔全部通過代碼演示,按縮進原則,每一個縮進即進一個遞歸函數,每打印一次即中止當前遞歸,也就是每個print說明:  1.n = 3, n = 2, n = 1是每次執行if(n == 1)的結果,這里就不寫判斷了,相信童鞋們也能看懂,也就是n不等與1時就減1進入遞歸  2.請注意a,b,c柱每次進入函數的順序,不要被形參帶錯路了,看準每次函數參數的實參 **/move(3, "a", "b", "c")n=3:  //開始從a上移動n-1即2個盤子通過c移動到b,以騰出c供a最后一個盤子移動  move(2, "a","c","b")  n=2:  //開始進行n=2的一個遞歸,把當前a('a')柱上的n-1個盤子通過c('b')移動到b('c')    move(1, "a", "b", "c")    n=1:    //n=2的第一個遞歸完成,打印結果,執行當前子函數剩余代碼      print("a", "->", "c")     move(1, "a", "c", "b")    n=1:      print("a", "->", "b")    move(1, "c", "a", "b")    n=1:      print("c", "->", "b")     //到這里完成了a柱上面的n-1即是2個盤子的移動//開始把a柱上最后一個盤子移動到c柱上move(1, "a", "b", "c")n=1:  print("a", "->", "c")  //到這里完成移動a柱上的最后一個盤子到c柱上 move(2, "b", "a", "c")n=2://開始進行n=2的第二個遞歸,即把當前b('b')的盤子(n-1個)通過a('a')移動到c('c')上  move(1, "b", "c", "a")  n=1:  //n=2 的第二個遞歸完成,打印結果并執行當前子函數的剩余代碼    print("b", "->", "a")  move(1, "b", "a", "c")  n=1:    print("b", "->", "c")  move(1, "a", "b", "c")  n=1:    print("a", "->", "c")    //到這里把b上的盤子通過a移動到c,//整個代碼執行完畢,漢諾塔移動完成

最后的打印結果為: 

python,漢諾塔遞歸算法

童鞋們理解了漢諾塔的遞歸算法原理后,可以寫個程序來試試,這里只是學到Python的遞歸所以用了Python,童鞋們可以用其他語言實現,漢諾塔確實能幫助理解遞歸原理,遞歸在程序設計中的重要性不言而喻啦!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一区二区成人av| 国产91色在线|免| 久久精品2019中文字幕| 欧美激情视频一区二区三区不卡| 亚洲精品av在线播放| 国产精品99久久久久久白浆小说| 久久中文精品视频| 国产精品一区二区久久久久| 91成人福利在线| 色999日韩欧美国产| 欧美www在线| 91超碰caoporn97人人| 欧美一级片免费在线| 91中文字幕一区| 91精品久久久久久久| 国产精品福利小视频| 欧美激情2020午夜免费观看| 亚洲一区制服诱惑| 最近中文字幕mv在线一区二区三区四区| 国产成人精彩在线视频九色| 国产经典一区二区| 亚洲成人久久久| 亚洲免费伊人电影在线观看av| 国产精品视频26uuu| 欧美国产视频日韩| 国产成人精品优优av| 中文国产成人精品久久一| 亚洲女人被黑人巨大进入al| 欧美电影免费观看电视剧大全| 亚洲欧美精品伊人久久| 国产小视频国产精品| 亚洲天堂免费在线| 欧美日韩国产在线看| 欧美激情一级欧美精品| 国产+成+人+亚洲欧洲| 欧美精品在线视频观看| 亚洲美女福利视频网站| 国产在线观看不卡| 欧美一乱一性一交一视频| 中文字幕日韩视频| 久久久久久久久久久久av| 欧美激情国产精品| 欧美高清视频在线观看| 91久久久国产精品| 日韩av免费网站| 91成人福利在线| 国产精品久久久久久久久久ktv| 北条麻妃一区二区在线观看| 中文字幕日韩在线播放| 欧美裸体视频网站| 国产精品综合网站| 欧美成人激情在线| 亚洲欧美日韩一区二区在线| 日韩网站免费观看高清| 国产一区二区日韩精品欧美精品| 欧美日韩一区二区三区| 亚洲天堂色网站| 狠狠躁夜夜躁人人爽天天天天97| 日韩成人在线电影网| 91精品国产91久久久久久吃药| 久久久久999| 亚洲精品福利资源站| 欧美精品video| 日韩亚洲成人av在线| 爱福利视频一区| 国产综合在线看| 成人免费视频网| 欧美成人精品xxx| 亚洲国产精品99| 欧美日韩日本国产| 91国产中文字幕| 亚洲精品久久视频| 日韩av在线播放资源| 亚洲情综合五月天| 欧美自拍视频在线观看| 91国产精品电影| 亚洲国产免费av| 久久久成人精品视频| 三级精品视频久久久久| 一区二区欧美亚洲| 成人夜晚看av| 成人在线精品视频| 69精品小视频| 91精品91久久久久久| 欧美日韩国产成人高清视频| 精品视频在线播放色网色视频| 国产亚洲精品高潮| 亚洲a级在线播放观看| 一道本无吗dⅴd在线播放一区| 亚洲精品第一页| 国产精品久久久久久久久久久新郎| 在线看国产精品| 久久视频在线观看免费| 丝袜美腿亚洲一区二区| 欧美精品日韩三级| 国产精品久久久久久一区二区| 色综合男人天堂| 成人国产精品一区| 日韩中文字幕在线精品| 亚洲欧美日韩中文视频| 国产精品女主播| 97精品欧美一区二区三区| 中文字幕日韩免费视频| 国产日本欧美一区| 91在线高清视频| 久久艳片www.17c.com| 日韩精品中文字幕在线观看| 亚洲午夜未满十八勿入免费观看全集| 亚洲天堂成人在线视频| 欧美最近摘花xxxx摘花| 精品丝袜一区二区三区| 91av在线免费观看视频| 亚洲国产精品国自产拍av秋霞| 欧美大人香蕉在线| 久久久久久久一区二区三区| 最近2019年日本中文免费字幕| 北条麻妃久久精品| 亚洲少妇中文在线| 欧美高清视频在线观看| 亚洲肉体裸体xxxx137| 亚洲久久久久久久久久久| 国产日韩在线亚洲字幕中文| 午夜免费日韩视频| 日本aⅴ大伊香蕉精品视频| 亚洲欧美视频在线| 日韩成人中文字幕| 国产亚洲xxx| 国产97人人超碰caoprom| 日产精品99久久久久久| 久久久久久国产精品| 九九热精品视频国产| 中文字幕v亚洲ⅴv天堂| 中文字幕在线日韩| 日韩av免费在线观看| 国产伦精品一区二区三区精品视频| 神马国产精品影院av| 国产精品一区二区av影院萌芽| 91精品综合久久久久久五月天| 91精品国产高清久久久久久久久| 欧美一级电影久久| 国产在线久久久| 精品视频在线播放色网色视频| 精品在线小视频| 国产91热爆ts人妖在线| 久久91亚洲精品中文字幕| 91久久久国产精品| 欧美自拍大量在线观看| 欧美在线视频网站| 美女久久久久久久久久久| 亚洲欧美综合v| 日本精品久久中文字幕佐佐木| 成人国内精品久久久久一区| 欧美国产第一页| 国产伦精品一区二区三区精品视频| 日韩av黄色在线观看| 欧美视频在线观看免费网址| 日韩在线免费观看视频| 91av视频在线| 日韩av在线免费播放| 91成人在线观看国产| 国产精品日本精品| 亚洲第一页在线| 欧美黑人性生活视频| 久久久久久国产三级电影|