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

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

代碼具體是如何運行的?

邏輯我懂,但我不知道為什么要這么寫,定義時move不是還未定義好么?為什么直接用move定義move,還有為什么只有一個print,而且是print a箭頭c,為什么會出來這么一大串?

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(4, 'A', 'B', 'C')

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

求解釋,感激不盡


正在回答

1 回答

? ? ? 我來談談體會吧,網上看了很多,很受啟發,結合自己的思考,把這個問題詳盡解釋一遍?,F在假設我是計算機,我怎么來執行這一串代碼?

  1. 當n==1時,直接將a移動到c.?記為a->c.

  2. 當n==2時,現實情況是需要b中轉,移動方法為a->b,a->c,b->c.此時我(計算機)是怎么執行這串代碼的呢?由于n==2,if內的語句不執行,現在執行的第一步是move(n-1, a, c, b),即為move(1, a, c, b),由于前面已經定義n==1的操作,即從第一位移動到第三位,此時運行結果為a->b,因此這里c和b必須交換位置才能得到我們想要的結果。接著執行第二步,a->c,這一步很簡單,其現實意義是把a最下面一層移動到c,無論n為多大,這一步都是必不可少的,也是居中的一步。接下來第三步我們需將b移動到c,執行代碼?move(1, b, a, c),執行過程與第一步類似,結果為b->c.當n==2時最終結果為a->b,a->c,b->c。

  3. 當n==3時,同樣if后的語句不執行?,F在執行的第一步是move(n-1, a, c, b),即為move(2, a, c, b),前面我們已經得到n==2的運行結果,但是要注意這里的參數已經變位置了,所以結果為a->c,a->b,c->b.第二步,a->c,照搬。第三步,?move(2, b, a, c),同樣是套用n==2時的結果,得b->a,b->c,a->c。當n==3時最終結果a->c,a->b,c->b,a->c,b->a,b->c,a->c。

  4. n==4時調用n==3的結果,這里就不再算了,但我們可以輕易的得出其運行結果必為15步。

……如此,以致無窮。

其實當n比較大時我們現實操作起來是很麻煩的,但是有了電腦,設計好模型,麻煩的計算都交給我們的好哥們去做,我們按輸出的結果一步一步操作必然可以得到我們想要的效果。反思這個模型,當n較大時,反復層層調用,最終執行的卻還是a->c,變量b只起中介作用,站在首位則輸出,末位則入。

相信看了我的推理,你所提到的問題都找到答案了。

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

舉報

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

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

進入課程

代碼具體是如何運行的?

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

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

幫助反饋 APP下載

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

公眾號

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