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

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

這道題不是很懂,求解釋代碼

我知道這個解法就是把除了最底下的(n-1)個盤移動到b然后最下面的盤移動到c最后再把那些(n-1)個盤移動到c問題是這個代碼怎么寫我不會,看了答案有點不明白為什么在 move(n-1,a,c,b)之后就打印a到c不是這一步只是把n-1個盤子移動從a借助c移動到b,然后再移動最后一個盤子到c嗎怎么就直接a到c,還有這里的a到c到底是指的是什么以及最后一步不應該是要把最下面的碟子移動到c嗎為什么沒寫只寫了n-1個盤子移動到c就沒了。還有最后一行的那個move(4,‘A’,'B',‘C’)是什么意思,帶入n等于4的時候跑一遍程序嗎還有為什么這里的ABC要加引號

還有右邊的指向箭頭比如A-》C是什么意思

https://img1.sycdn.imooc.com//5d32bcef0001532113790792.jpg

還有最后我這里還有什么問題為什么說我的輸出錯誤

正在回答

9 回答

A,B,C,分別表示1號柱子、2號柱子、3號柱子,現在假設是把1號柱子上的所以盤子,根據規則移動到3號柱子,其實移動到哪個都可以。所以遞歸開始,假設就一個盤子,那把1號柱子作為地點,3號柱子作為重點,只要移動一次就可以了,那就是表示我A --> C,然后開始遞歸,如果有2個盤子,那我們就要借助2號柱子,先把第一個盤子移動2號柱子(B),然后再把2號盤子(比第一個大的盤子)移動到3號柱子,所以在遞歸n? > 1的情況下,有一個print A --> C的過程,那之前n-1個盤子,是如何移動2號柱子暫存的呢,同樣道理,是通過3號柱子作為中間柱子來完成的,所以遞歸 move(n-1, 'A' , 'C',? 'B' ),當把最大的一個盤子由A移動到C完成后(print A --> C),還需要把在B柱子上暫存的n-1個盤子移動C柱子才可以啊,這是可以想到把A柱子作為中間柱子,所以下面的移動就是move(n-1, 'B', 'A', 'C');這樣遞歸就完成了。如果程序中能打印出移動的次數和移動的盤子序號(假設盤子由1號到n號,1號最新,依次類推),結果就更清新,例如,有2個盤子,移動過程:

第1次移動,移動第1塊圓盤,A-->B

第2次移動,移動第2塊圓盤,A-->C

第3次移動,移動第1塊圓盤,B-->C

如果有3塊盤子,移動的過程為:

第1次移動,移動第1塊圓盤,A-->C

第2次移動,移動第2塊圓盤,A-->B

第3次移動,移動第1塊圓盤,C-->B

第4次移動,移動第3塊圓盤,A-->C? ? # 前面的2塊盤子已經都移動B柱子上,所以直接把第3塊移動到C就可以了;

第5次移動,移動第1塊圓盤,B-->A

第6次移動,移動第2塊圓盤,B-->C

第7次移動,移動第1塊圓盤,A-->C


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

新猿一個

題目要求里面沒有說明 盤子有大小 并要按盤子大小順序放
2019-07-24 回復 有任何疑惑可以回復我~
#2

慕的地0133975 回復 新猿一個

這個是漢諾塔問題的題目要求哦。
2019-07-26 回復 有任何疑惑可以回復我~

對不起 我智障了 不要理我

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

http://img1.sycdn.imooc.com//5d91b77c00017eec10011409.jpg看結果最后兩行

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

我的問題是 print (a,'-->',c)這個動作為什么能輸出不同的結果

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

A,B,C,分別表示1號柱子、2號柱子、3號柱子,現在假設是把1號柱子上的所有盤子,根據規則移動到3號柱子,其實移動到哪個都可以。所以遞歸開始,假設就一個盤子,那把1號柱子作為起點,3號柱子作為終點,只要移動一次就可以了,那就是表示為 A --> C,然后開始遞歸,如果有2個盤子,那我們就要借助2號柱子,先把第一個盤子移動到2號柱子(B),然后再把2號盤子(比第一個大的盤子)移動到3號柱子,所以在遞歸n? > 1的情況下,有一個print A --> C的過程,那之前n-1個盤子,是如何移動到2號柱子暫存的呢,同樣道理,是通過3號柱子作為中間柱子來完成的,所以遞歸 move(n-1, 'A' , 'C',? 'B' ),當把最大的一個盤子由A移動到C完成后(print A --> C),還需要把在B柱子上暫存的n-1個盤子移動C柱子才可以啊,這時可以想到把A柱子作為中間柱子,所以下面的移動就是move(n-1, 'B', 'A', 'C');這樣遞歸就完成了。如果程序中能打印出移動的次數和移動的盤子序號(假設盤子由1號到n號,1號最小,依次類推),結果就更清新,例如,有2個盤子,移動過程:

第1次移動,移動第1塊圓盤,A-->B

第2次移動,移動第2塊圓盤,A-->C

第3次移動,移動第1塊圓盤,B-->C

如果有3塊盤子,移動的過程為:

第1次移動,移動第1塊圓盤,A-->C

第2次移動,移動第2塊圓盤,A-->B

第3次移動,移動第1塊圓盤,C-->B

第4次移動,移動第3塊圓盤,A-->C? # 前面的2塊盤子都已經移動到B柱子上,所以直接把第3塊移動到C就可以了;

第5次移動,移動第1塊圓盤,B-->A

第6次移動,移動第2塊圓盤,B-->C

第7次移動,移動第1塊圓盤,A-->C


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

慕用0051444

為什么不是 else move(n-1, a, c, b) 直接函數move(n-1, a, c, b)符合邏輯嗎?
2019-07-26 回復 有任何疑惑可以回復我~
#2

寶慕林3336349 回復 慕用0051444

一樣的呀,這里只是省略了else而已,下面這三行代碼就是else的代碼塊 move(n-1, a, c, b) print a, '-->', c move(n-1, b, a, c)
2019-10-01 回復 有任何疑惑可以回復我~

遞歸就只有1和n-1就可以了,有n,n-1,……,一直到1為止,如果還要寫n-2,那就不是遞歸的思想了。

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

個人理解:n=4這個4是迭代次數。ABC加引號說明是字符串,我們設置函數的時候是設置的abc,然后我們用這個函數的時候,‘A’‘B’‘C’就是我們輸入的參數,分別對應a,b,c,你可以把它們換成張三李四王二看看效果是一樣的。你可以百度一下漢諾塔問題去了解一下關于盤子為什么這么移動。

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

qq_慕斯3385410 提問者

這個移動我知道,但是就是代碼寫的我沒看懂為什么只寫n-1的盤子移動過程不寫最后一個
2019-07-20 回復 有任何疑惑可以回復我~
#2

慕函數1133428 回復 qq_慕斯3385410 提問者

我的理解是,最后一個盤子就是第n個盤子只移動一次,直接從A移動到C
2019-07-23 回復 有任何疑惑可以回復我~

https://img1.sycdn.imooc.com//5d32cb340001ecf905980313.jpg

我的理解

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

我認為的是字符串是需要加單引號的 N應該代表個數? ?你6行應該是要把“->”變成‘-->’應該就可以了

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

舉報

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

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

進入課程

這道題不是很懂,求解釋代碼

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

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

幫助反饋 APP下載

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

公眾號

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