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

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

這個邏輯不是很懂啊?這兩個move的順序是怎么樣的?看詳情

def move(n, a, b, c):

? ? if n ==1:

? ? ? ? print a, '-->', c

? ? ? ? return

? ? move(n-1, a, c, b)#將N-1個塔通過c移動到b

? ? print a, '-->', c#這里是將最下面最大的一個塔移動到了c嗎?

? ? move(n-1, b, a, c)#將N-1個塔通過b移動到c

move(4, 'A', 'B', 'C')

##用腦子想了半天的一個游戲,就從N變成了N-1然后就可以讓計算機自己去跑了嗎,?我還下了個漢諾塔小游戲竟然答案是對的

正在回答

3 回答

? move(n-1, b, a, c)#將N-1個塔通過b移動到c? ? ?這一行意思應該是將N-1個塔通過a移動到c?

做個假設比如n=3(即a中有123三個圓盤n>1)時,那么就把12先看作一個整體(即N-1),先把1,2通過c移到b中即move(n-1, a, c, b),這樣我們就可以把最大的數字3從a移到c了即輸出print a, '-->', c接著就是12已經在b中了,3在c中而a并沒有圓盤,這時候我們輸出move(n-1, b, a, c)把a和b位置調換就是正確的了,即把b中的12通過a移到c中(3已經在c中我們就不鳥它了)。就這樣一直遞歸到n==1時,我們再輸出print a, '-->', c,然后結束。


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

LeoJing 提問者

所以在第五行“move(n-1, a, c, b)”的時候,是已經在調用前四行定義的move函數了
2018-09-05 回復 有任何疑惑可以回復我~

感覺到這里就開始變難了呢~

這是老師給的百度百科里面的

Python

1
2
3
4
5
6
7
8
9
def?hanoi(n,?a,?b,?c):
????if?n?==?1:
????????print(a,?'-->',?c)
????else:
????????hanoi(n?-?1,?a,?c,?b)
????????print(a,?'-->',?c)
????????hanoi(n?-?1,?b,?a,?c)
#?調用
hanoi(5,?'A',?'B',?'C')

有else好理解一些

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

1小馬哥1

有了else確實好理解些,但是沒有else為什么也可以?前面講if語句時,沒有這樣的操作呀
2018-09-11 回復 有任何疑惑可以回復我~
#2

qq_個性不張揚_0 回復 1小馬哥1

if下面加了縮進,表示下面的代碼是當if語句為真時執行的代碼。 if下面沒有縮進(和if同列),即表示if語句為假時執行的代碼(省略了else)
2018-09-14 回復 有任何疑惑可以回復我~

這個邏輯不是很懂???這兩個move的順序是怎么樣的?看詳情

def move(n, a, b, c):

? ? if n ==1:

? ? ? ? print a, '-->', c

? ? ? ? return

? ? move(n-1, a, c, b)#將N-1個塔通過c移動到b

? ? print a, '-->', c#這里是將最下面最大的一個塔移動到了c嗎?

? ? move(n-1, b, a, c)#將N-1個塔通過b移動到c

move(4, 'A', 'B', 'C')

##用腦子想了半天的一個游戲,就從N變成了N-1然后就可以讓計算機自己去跑了嗎,?我還下了個漢諾塔小游戲竟然答案是對的

對于move這個函數當N=1的時候執行第二行,當N>1的時候,執行5,6,7行代碼嗎?就比如當N=4的時候這里面5-6-7行代碼的循環順序是怎樣的呢???


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

舉報

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

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

進入課程

這個邏輯不是很懂???這兩個move的順序是怎么樣的?看詳情

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

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

幫助反饋 APP下載

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

公眾號

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