漢諾塔是一種古老的智力游戲,以法國(guó)數(shù)學(xué)家Edouard Lucas的名字命名。這個(gè)游戲包括三個(gè)塔和一些圓盤,這些圓盤按照從大到小的順序放在一個(gè)塔上。游戲的目標(biāo)是將所有的盤子從一個(gè)塔移動(dòng)到另一個(gè)塔上,但是每次你只能移動(dòng)一個(gè)盤子并且不能將較大的盤子放在較小的盤子上。
def hanoi(n, source, target, auxiliary): if n == 1: print("移動(dòng)盤子1從 " + source + " 到 " + target) return hanoi(n-1, source, auxiliary, target) print("移動(dòng)盤子" + str(n) + "從 " + source + " 到 " + target) hanoi(n-1, auxiliary, target, source) n = 3 hanoi(n, 'A', 'C', 'B')
下面是代碼解釋:
hanoi函數(shù)使用遞歸的方式實(shí)現(xiàn)漢諾塔的移動(dòng)。如果n等于1,則只需將一個(gè)盤子從源塔移動(dòng)到目標(biāo)塔。否則,將n-1個(gè)盤子從源塔移動(dòng)到輔助塔,然后將最后一個(gè)盤子從源塔移動(dòng)到目標(biāo)塔。最后,將n-1個(gè)盤子從輔助塔移動(dòng)到目標(biāo)塔。
在主函數(shù)中,我們調(diào)用hanoi函數(shù),并將源塔、目標(biāo)塔和輔助塔指定為A、C和B。在此示例中,我們將3個(gè)盤子移動(dòng)到目標(biāo)塔上。
執(zhí)行代碼,輸出結(jié)果如下:
移動(dòng)盤子1從 A 到 C 移動(dòng)盤子2從 A 到 B 移動(dòng)盤子1從 C 到 B 移動(dòng)盤子3從 A 到 C 移動(dòng)盤子1從 B 到 A 移動(dòng)盤子2從 B 到 C 移動(dòng)盤子1從 A 到 C
從結(jié)果可以看出,我們已經(jīng)成功地將3個(gè)盤子從A移到了C。
下一篇php hmvc