move(n, A, B) 就表示把第n個餅從A柱移到B柱, 其中step是個全局變量,用來記錄移動的次數。
站在用戶的角度思考問題,與客戶深入溝通,找到息縣網站設計與息縣網站推廣的解決方案,憑借多年的經驗,讓設計與互聯網技術結合,創造個性化、用戶體驗好的作品,建站類型包括:成都網站設計、成都做網站、企業官網、英文網站、手機端網站、網站推廣、申請域名、網頁空間、企業郵箱。業務覆蓋息縣地區。
hanoi(n, A, B, C) 就是你所問的實現遞歸的函數, 表示把n個餅從A柱通過B柱移到C柱。
其中 n==1 是遞歸的最基本的情況, 如果只有一個餅就直接移到目標柱子即可。
不然呢我們就先把最上面n-1個餅從A通過C移到B,注意這里移到的是B柱哦~, 然后把第n塊餅移到C柱,再重新把之前移到B柱上的n-1個餅通過A移動到C。
整個過程挺直白的,想通了就明白了
1、首先,函數中有兩個情況:(1)如只有一個盤子,則不需要利用B座,直接將盤子從A移動到C,在移動過程中可以不利用B座,(2)將最大盤子上面的n-1個盤子通過C為輔助盤移到B,B上的n-1個盤子由A為輔助盤移動C。(n-1個盤子的移動澤根據遞歸來實現)漢諾塔問題的遞歸終止條件即是A座上只有一個盤子。
2、其次,輸出移動次數時,要求的寬度為4個字符,右對齊用{:4}去實現。
仔細看一下 5-7行調用 move 時候的參數順序, 不是你說的那樣沒有變:
#5 的含義是將 A 上的前 n-1 個移動到 B
#6 : 將 A 最后一個移動到 C
#7: 將 B 上的 n-1 (即#5 從 A 移動過來的 n-1) 個移動到 C
遞歸方法有些時候是不太好理解,不過遞歸的意義就是把解決問題n變成解決n-1的問題,最終變成解決1個問題。
假設有n個盤子,從上到下依次編號,最下面的盤子編號是大寫的N。托盤分別是x,y,z。要把所有盤子從x移動到z。
前面幾行代碼就不解釋了,很容易理解。
第五行,如果只有一個盤子,就直接從x移動到z。
第七行,如果不只一個盤子,先把上面n-1個盤子從x移動到y。
第八行,再把N號盤子從x移動到z。
第九行,再把剛才那n-1個盤子從y移動到z。
至于那n-1個盤子是怎么移動的,再次調用這個函數,把問題變成n-2個盤子加1個盤子的問題。
本文名稱:python函數漢諾塔 用python語言編寫漢諾塔程序
標題路徑:http://vcdvsql.cn/article38/dopiisp.html
成都網站建設公司_創新互聯,為您提供靜態網站、動態網站、網站制作、網站建設、品牌網站制作、響應式網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯