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

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

請問在漢諾塔的遞歸函數中,計算機是怎么計算每一層的?

我完全搞不懂這個漢諾塔遞歸函數,比如說當n=2時,計算機是怎么計算怎么出結果的?那么n=3時呢?

正在回答

4 回答

是不懂遞歸么?你可以按代碼順序在腦海里過一邊執行的語句段。比如在a函數里調用了a函數(這里用a1,a2表示每一個a函數以區分),a1(未執行完)-->a2(執行完)-->a1(剩下未執行的),如果更多的話:a1(未執行完)-->a2(未執行完)-->a3(未執行完)-->a4(執行完)-->a3(剩下未執行的)-->a2(剩下未執行的)-->a1(剩下未執行的),里面一層執行完了才會執行它外面的一層

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

澄心程長 提問者

非常感謝!
2016-12-27 回復 有任何疑惑可以回復我~
#2

澄心程長 提問者 回復 澄心程長 提問者

我后面終于想明白了,見下面的自問自答
2016-12-27 回復 有任何疑惑可以回復我~
#3

yonghaoy 回復 澄心程長 提問者

嗯,我回復后就看到了,,,有時候搞不懂就可以在腦海里或者紙上按照代碼執行順序走一遍,邏輯會清晰很多
2016-12-27 回復 有任何疑惑可以回復我~

請教一下,在n>1之后,move里面的數值順序為啥改成(a,c,b)了呢?后面一步的(b,a,c)也是不理解

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

我終于找到理解的地方了、謝謝、大家、謝謝

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

本來不想自問自答的,想了一個中午終于弄明白了,所以回答一下記錄自己的思考過程。

當n=1的時候,直接計算出a-->c;

當n=2的時候,

會首先計算move(n-1,a, c, b),即(1,a,c,b),那么符合n=1時的計算法則,即得出a-->b#意思是那個tuple里的第二個元素指向第四個元素。

然后繼續執行程序a-->c

最后是計算move(n-1,b,a, c),即(1,b,a, c),這時符合n=1時的計算法則,即得出b-->c#意思是那個tuple里的第二個元素指向第四個元素

當n=3的時候,

計算move(n-1,a, c, b)時就要調用n=2時的結果

然后執行a-->c

最后計算move(n-1,b,a, c)時調用n=2時的結果


也就是說,這個函數的計算方式就是將那個tuple[1](即第二個元素)“-->”tuple[3](即第四個元素),那么如果要表示a-->b的話,就把a放在tuple[1]的位置,b放在tuple[3]的位置;如果要表示b-->c的話,就要把b放在tuple[1]的位置,c放在tuple[3]的位置

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

燕刀流

厲害啊,看到你這里我才想明白
2017-01-24 回復 有任何疑惑可以回復我~
#2

這是bug 回復 燕刀流

我還是沒看懂,咋回事
2017-02-14 回復 有任何疑惑可以回復我~
#3

Ethan_8

想請問當N=2 的時候,move的參數順序為啥是a,c,b了呢? 卡在路徑這塊了,還望不吝賜教!
2017-09-25 回復 有任何疑惑可以回復我~

舉報

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

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

進入課程

請問在漢諾塔的遞歸函數中,計算機是怎么計算每一層的?

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

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

幫助反饋 APP下載

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

公眾號

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