亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

如下圖,誰能解釋下面輸出內容的意思

def?move(n,?a,?b,?c):
????if?n?==?1:
????????print?a,'-->',?c
????????return
????move(n-1,a,c,b)
????print?a,'==>',?c
????move(n-1,b,a,c)
move(2,?'A',?'B',?'C')

A?-->?B
A?==>?C
B?-->?C


正在回答

2 回答

漢諾塔的遞歸問題,特別容易被 參數名 給弄混淆,這個問題可以分為兩部分來說:

首先,這是一個遞歸問題,遞歸問題的思路都是一致的:

首先,遞減遞歸,其次做邊界判斷。 遞減調用:就是題主代碼里的第5行,第7行代碼; 邊界判斷: 第2行的if判斷。

其次這是一個漢諾塔問題,漢諾塔的問題,就是在除了初始柱外,依次放入次大底盤,且依次從初始柱解放最大底盤,這個問題代入遞歸的話就需要以下思路:

反向思考,從最簡單的只有兩個盤子考慮,而后依次遞增。 一個盤子的話就是會直接進入if判斷,也沒什么可以考慮的。

最后說下,漢諾塔的遞歸思路中最易混淆的“參數名”,在此只做一次說明,在第5行調用

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

這次調用move函數時:執行到第6行:

print?a,'==>',?c

打印的是:?

A?-->?B


想明白這些,然后從只有三個盤子去套用函數,應該就能明白了,如果還不明白,也不是我打字能說明的了。

2 回復 有任何疑惑可以回復我~
#1

醉大俠 提問者

差不多這個意思
2016-03-25 回復 有任何疑惑可以回復我~

漢諾塔,兩個圓盤(把A柱子上面的兩個圓盤按照原來的大小順序移動到C柱子上),把最上面的盤子從A移動到B,再把中間的盤子從A移動到C,最后把B柱子上的盤子從B移動到C。

0 回復 有任何疑惑可以回復我~
#1

醉大俠 提問者

原理我是知道的,程序過程不是很理解
2016-03-24 回復 有任何疑惑可以回復我~
#2

好好的爲甚麼不來 回復 醉大俠 提問者

原理最終的目的是把盤子全部挪動到C處,你可以把最下面的盤子看成一個,其他的盤子看成一個整體,先把其他的盤子挪到B處(遞歸過程),然后最下面的盤子就可以由A挪動到C處,接下來就是把其他的盤子借助A挪動到C處,過程就類似于前面的過程,進行遞歸,直到剩下的盤子全部挪動到C處。
2016-03-24 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
初識Python
  • 參與學習       758398    人
  • 解答問題       8967    個

學python入門視頻教程,讓你快速入門并能編寫簡單的Python程序

進入課程

如下圖,誰能解釋下面輸出內容的意思

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號