重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
move(n, A, B) 就表示把第n個餅從A柱移到B柱, 其中step是個全局變量,用來記錄移動的次數(shù)。
站在用戶的角度思考問題,與客戶深入溝通,找到息縣網(wǎng)站設(shè)計與息縣網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站設(shè)計、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、申請域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋息縣地區(qū)。
hanoi(n, A, B, C) 就是你所問的實現(xiàn)遞歸的函數(shù), 表示把n個餅從A柱通過B柱移到C柱。
其中 n==1 是遞歸的最基本的情況, 如果只有一個餅就直接移到目標(biāo)柱子即可。
不然呢我們就先把最上面n-1個餅從A通過C移到B,注意這里移到的是B柱哦~, 然后把第n塊餅移到C柱,再重新把之前移到B柱上的n-1個餅通過A移動到C。
整個過程挺直白的,想通了就明白了
1、首先,函數(shù)中有兩個情況:(1)如只有一個盤子,則不需要利用B座,直接將盤子從A移動到C,在移動過程中可以不利用B座,(2)將最大盤子上面的n-1個盤子通過C為輔助盤移到B,B上的n-1個盤子由A為輔助盤移動C。(n-1個盤子的移動澤根據(jù)遞歸來實現(xiàn))漢諾塔問題的遞歸終止條件即是A座上只有一個盤子。
2、其次,輸出移動次數(shù)時,要求的寬度為4個字符,右對齊用{:4}去實現(xiàn)。
仔細(xì)看一下 5-7行調(diào)用 move 時候的參數(shù)順序, 不是你說的那樣沒有變:
#5 的含義是將 A 上的前 n-1 個移動到 B
#6 : 將 A 最后一個移動到 C
#7: 將 B 上的 n-1 (即#5 從 A 移動過來的 n-1) 個移動到 C
遞歸方法有些時候是不太好理解,不過遞歸的意義就是把解決問題n變成解決n-1的問題,最終變成解決1個問題。
假設(shè)有n個盤子,從上到下依次編號,最下面的盤子編號是大寫的N。托盤分別是x,y,z。要把所有盤子從x移動到z。
前面幾行代碼就不解釋了,很容易理解。
第五行,如果只有一個盤子,就直接從x移動到z。
第七行,如果不只一個盤子,先把上面n-1個盤子從x移動到y(tǒng)。
第八行,再把N號盤子從x移動到z。
第九行,再把剛才那n-1個盤子從y移動到z。
至于那n-1個盤子是怎么移動的,再次調(diào)用這個函數(shù),把問題變成n-2個盤子加1個盤子的問題。