課程
/后端開發
/Python
/初識Python
我完全搞不懂這個漢諾塔遞歸函數,比如說當n=2時,計算機是怎么計算怎么出結果的?那么n=3時呢?
2016-12-27
源自:初識Python 7-5
正在回答
是不懂遞歸么?你可以按代碼順序在腦海里過一邊執行的語句段。比如在a函數里調用了a函數(這里用a1,a2表示每一個a函數以區分),a1(未執行完)-->a2(執行完)-->a1(剩下未執行的),如果更多的話:a1(未執行完)-->a2(未執行完)-->a3(未執行完)-->a4(執行完)-->a3(剩下未執行的)-->a2(剩下未執行的)-->a1(剩下未執行的),里面一層執行完了才會執行它外面的一層
澄心程長 提問者
澄心程長 提問者 回復 澄心程長 提問者
yonghaoy 回復 澄心程長 提問者
請教一下,在n>1之后,move里面的數值順序為啥改成(a,c,b)了呢?后面一步的(b,a,c)也是不理解
我終于找到理解的地方了、謝謝、大家、謝謝
本來不想自問自答的,想了一個中午終于弄明白了,所以回答一下記錄自己的思考過程。
當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]的位置
燕刀流
這是bug 回復 燕刀流
Ethan_8
舉報
學python入門視頻教程,讓你快速入門并能編寫簡單的Python程序
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-12-27
是不懂遞歸么?你可以按代碼順序在腦海里過一邊執行的語句段。比如在a函數里調用了a函數(這里用a1,a2表示每一個a函數以區分),a1(未執行完)-->a2(執行完)-->a1(剩下未執行的),如果更多的話:a1(未執行完)-->a2(未執行完)-->a3(未執行完)-->a4(執行完)-->a3(剩下未執行的)-->a2(剩下未執行的)-->a1(剩下未執行的),里面一層執行完了才會執行它外面的一層
2017-09-25
請教一下,在n>1之后,move里面的數值順序為啥改成(a,c,b)了呢?后面一步的(b,a,c)也是不理解
2017-04-20
我終于找到理解的地方了、謝謝、大家、謝謝
2016-12-27
本來不想自問自答的,想了一個中午終于弄明白了,所以回答一下記錄自己的思考過程。
當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]的位置