国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python實(shí)現(xiàn)漢諾塔方法匯總

2019-11-25 16:37:53
字體:
供稿:網(wǎng)友

學(xué)習(xí)python遇到的第一個(gè)問題:漢諾塔問題的實(shí)現(xiàn)。首先是不知道什么是漢諾塔問題,然后是不知道怎么實(shí)現(xiàn)。于是百度了下,結(jié)果如下:

漢諾塔:漢諾塔(又稱河內(nèi)塔)問題是源于印度一個(gè)古老傳說的益智玩具。大梵天創(chuàng)造世界的時(shí)候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。并且規(guī)定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動(dòng)一個(gè)圓盤

方法一:

def move(n,a,b,c)    # n=2  if n==1 :      # 跳過    print a,'-->',c    return None  move(n-1,a,c,b)  # n=2,執(zhí)行n-1后,move(n-1,a,c,b)->move(1,a,c,b),跳到if處,執(zhí)行print:a-->b  print a,'-->',c  # 執(zhí)行print,這里的a和c是指定義的函數(shù)的參數(shù)a和c,打印結(jié)果是:a-->c  move(n-1,b,a,c)  # n=1 ,執(zhí)行n-1后,跳到if處,執(zhí)行print,此時(shí),a=b,c=c,結(jié)果是:b-->cmove(2,'a','b','c')

方法二:

def printMove(fr,to):  print 'move from ' + str(fr) + ' to ' + str(to) def Towers(n,fr,to,spare):  if n == 1:    printMove(fr,to)  else:    Towers(n-1,fr,spare,to)    Towers(1,fr,to,spare)    Towers(n-1,spare,to,fr)

方法三:

def hanoi(n,x,y,z):if n==1:print(x,'-->',z)else:hanoi(n-1,x,z,y)#將前n-1個(gè)盤子從x移動(dòng)到y(tǒng)上hanoi(1,x,y,z)#將最底下的最后一個(gè)盤子從x移動(dòng)到z上hanoi(n-1,y,x,z)#將y上的n-1個(gè)盤子移動(dòng)到z上n=int(input('請輸入漢諾塔的層數(shù):'))hanoi(n,'x','y','z')

總結(jié)下:

# 漢諾塔思想筆記
# 認(rèn)識(shí)漢諾塔的目標(biāo):把A柱子上的N個(gè)盤子移動(dòng)到C柱子
# 遞歸的思想就是把這個(gè)目標(biāo)分解成三個(gè)子目標(biāo)
# 子目標(biāo)1:將前n-1個(gè)盤子從a移動(dòng)到b上
# 子目標(biāo)2:將最底下的最后一個(gè)盤子從a移動(dòng)到c上
# 子目標(biāo)3:將b上的n-1個(gè)盤子移動(dòng)到c上
# 然后每個(gè)子目標(biāo)又是一次獨(dú)立的漢諾塔游戲,也就可以繼續(xù)分解目標(biāo)直到N為1

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 玛纳斯县| 伊金霍洛旗| 随州市| 瑞安市| 宁安市| 兴海县| 上杭县| 宝山区| 榆社县| 游戏| 天镇县| 万盛区| 高雄市| 龙门县| 河津市| 郁南县| 武城县| 林西县| 多伦县| 盘山县| 陇西县| 仁布县| 巴塘县| 永修县| 丹阳市| 嘉善县| 马山县| 平顺县| 阿巴嘎旗| 湾仔区| 伽师县| 通城县| 朝阳市| 兴安县| 武陟县| 抚州市| 绥棱县| 大冶市| 伽师县| 双峰县| 桂平市|