課程
/后端開發
/Python
/初識Python
move(n-1,a,c,b)??#這里c是‘B’,b是“C”嗎? move(n-1,b,a,c)?#這里b是“A”,a是“B”?嗎?
2018-10-26
源自:初識Python 7-5
正在回答
這個有點難理解。它只是針對遞歸參數的位置變換,說參數為4ABC不好理解,假設參數4123。這個move(n-1,a,c,b)中c與b的位置進行了換位變成move(n,a,b,c),原本是(4,1,2,3)變成了(4-1,1,3,2),由于3大于1,繼續遞歸,變成(4-1-1,1,2,3),一直到(4-1-1-1,1,3,2)才符合條件進行if語句,輸出1-->2,跳出if判斷,回上一層(4-1-1,1,2,3)再繼續輸出1-->3,(4-1-1,2,1,3),進行遞歸(4-1-1-1,2,3,1)符合if判斷輸入2-->1...就這樣算的,建議用去IDE去用斷點調試一下看看規律?;仡^我把這個遞歸層次全部列出來。
move(n
-
1
,a,c,b)中c與b的位置進行了換位變成move(n,a,b,c),原本是(4,1,2,3)變成了(4-1,1,3,2),由于3大于1,繼續遞歸,變成(4-1-1,1,2,3),一直到(4-1-1-1,1,3,2)才符合條件進行if語句,輸出1-->2,跳出if判斷,回上一層(4-1-1,1,2,3)再繼續輸出1-->3,(4-1-1,2,1,3),進行遞歸(4-1-1-1,2,3,1)符合if判斷輸入2-->1...就這樣算的,建議用去IDE去用斷點調試一下看看規律?;仡^我把這個遞歸層次全部列出來。
進行了換位變成move(n,a,b,c),原本是(4,1,2,3)變成了(4-1,1,3,2),由于3大于1,繼續遞歸,變成(4-1-1,1,2,3),一直到(4-1-1-1,1,3,2)才符合條件進行if語句,輸出1-->2,跳出if判斷,回上一層(4-1-1,1,2,3)再繼續輸出1-->3,(4-1-1,2,1,3),進行遞歸(4-1-1-1,2,3,1)符合if判斷輸入2-->1...就這樣算的,建議用去IDE去用斷點調試一下看看規律?;仡^我把這個遞歸層次全部列出來。
,a,b,c)
Evan233
倚劍生死幻夢情 回復 Evan233
Evan233 回復 倚劍生死幻夢情
#if條件不成立的省略
# { 看做遞歸開始
# } 看做遞歸結束
move(4, a, b, c):{? #實際數值(4, A, B, C)
? ? move(3, a, c, b):{? ? ? ? ? ? #c,b調換,實際數值(3, A, C, B), 將這四個值帶入move(3, a, b, c)遞歸1
? ? ? ? move(2, a, c, b):{? ? ? ? #c,b調換,實際數值(2, A, B, C), 將這四個值帶入move(2, a, b, c)遞歸2
? ? ? ? ? ? move(1, a, c, b):{? ? #c,b調換,實際數值(1, A, C, B), 將這四個值帶入move(1, a, b, c)遞歸3
? ? ? ? ? ? ? ? if n == 1:? ? ? ? #此時n==1,if條件成立
? ? ? ? ? ? ? ? print(a, '-->',c) #這是第一次打印A-->B
? ? ? ? ? ? }? ? ? ? ? ? ? ? ? ? ?#最近的一次遞歸3完成,回到遞歸2,實際數值(2, A, B, C)
? ? ? ? ? ? print(a, '-->', c)? ? #這是第二次打印A-->C
? ? ? ? ? ? move(1, b, a, c):{? ? #a,b調換,實際數值(1, B, A, C), 將這四個值帶入move(1, a, b, c)遞歸4
? ? ? ? ? ? ? ? if n == 1:
? ? ? ? ? ? ? ? print(a, '-->', c)#這是第三次打印B-->C? ? ? ??
? ? ? ? ? ? }? ? ? ? ? ? ? ? ? ? ?#最近的一次遞歸4完成,回到遞歸2,實際數值(2, A, B, C)
? ? ? ? }? ? ? ? ? ? ? ? ? ? ? ? ?#最近的一次遞歸2完成,回到遞歸1,實際數值(3, A, C, B)? ? ? ? ? ??
? ? ? ? print(a, '-->', c)? ? ? ? #這是第四次打印A-->B
? ? ? ? move(2, b, a, c):{? ? ? ? #a,b調換, 實際數值(2, C, A, B), 將這四個值帶入move(2, a, b, c)遞歸5
? ? ? ? ? ? move(1, a, c, b):{? ? #c,b調換, 實際數值(1, C, B, A), 將這四個值帶入move(1, a, b, c)遞歸6
? ? ? ? ? ? ? ? print(a, '-->', c)#這是第五次打印C-->A
? ? ? ? ? ? }? ? ? ? ? ? ? ? ? ? ?#最近的一次遞歸6完成,回到遞歸5,實際數值(2, C, A, B)
? ? ? ? ? ? print(a, '-->', c)? ? #這是第六次打印C-->B
? ? ? ? ? ? move(1, b, a, c):{? ? #a,b調換, 實際數值(1, A, C, B), 將這四個值帶入move(1, a, b, c)遞歸7
? ? ? ? ? ? ? ? print(a, '-->', c)#這是第七次打印A-->B
? ? ? ? ? ? }? ? ? ? ? ? ? ? ? ? ?#最近的一次遞歸7完成,回到遞歸5,實際數值(2, C, A, B)
? ? ? ? }? ? ? ? ? ? ? ? ? ? ? ? ?#最近的一次遞歸5完成,回到遞歸1,實際數值(3, A, C, B)
? ? }? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#最近的一次遞歸1完成,原參數中的move(n - 1, a, c, b)遞歸全部完成,實際數值(4, A, B, C)
? ? print(a, '-->', c)? #這是第八次打印A-->C,下面跟上面同樣的方式去理解,就不寫了,太累了。
? ? move(3, b, a, c):{
? ? ? ? move(2, a, c, b):{
? ? ? ? ? ? move(1, a, c, b):{
? ? ? ? ? ? ? ? print(a, '-->', c)? ?#這是第九次打印
? ? ? ? ? ? }
? ? ? ? ? ? print(a, '-->', c)#這是第10次打印
? ? ? ? ? ? move(1, b, a, c):{
? ? ? ? ? ? ? ? print(a, '-->', c)#這是第11次打印
? ? ? ? }
? ? ? ? print(a, '-->', c)? ?#這是第12次打印
? ? ? ? move(2, b, a, c):{
? ? ? ? ? ? ? ? print(a, '-->', c)? ?#這是第13次打印
? ? ? ? ? ? print(a, '-->', c)#這是第14次打印
? ? ? ? ? ? ? ? print(a, '-->', c)#這是第15次打印
? ? ? ? }? ??
? ? }
}
把遞歸放這不是玩火呢
還是沒懂啊
這只是表現形式問題。這個問題難點一是遞歸本身,第二是表現形式。
第一,把解決問題的思路寫出來(遞歸)
第二,把思路里的每一步轉換成代碼(就是你說的難理解的點,在紙上標示出來或者斷點調試都可以)
def move(n-1 , a,b,c),括號中為形參,子程序中不需要明確給定四個變量,
main中使用move()函數時括號中給出實參,四個及以內,main中引用時給出move(3,1,2,3),傳遞到函數中
n=3,a=1,b=2,c=3
舉報
學python入門視頻教程,讓你快速入門并能編寫簡單的Python程序
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2018-10-26
這個有點難理解。它只是針對遞歸參數的位置變換,說參數為4ABC不好理解,假設參數4123。這個
move(n
-
1
,a,c,b)中c與b的位置
進行了換位變成
move(n
,a,b,c)
,原本是(4,1,2,3)變成了(4-1,1,3,2),由于3大于1,繼續遞歸,變成(4-1-1,1,2,3),一直到(4-1-1-1,1,3,2)才符合條件進行if語句,輸出1-->2,跳出if判斷,回上一層(4-1-1,1,2,3)再繼續輸出1-->3,(4-1-1,2,1,3),進行遞歸(4-1-1-1,2,3,1)符合if判斷輸入2-->1...就這樣算的,建議用去IDE去用斷點調試一下看看規律?;仡^我把這個遞歸層次全部列出來。2018-12-02
#if條件不成立的省略
# { 看做遞歸開始
# } 看做遞歸結束
move(4, a, b, c):{? #實際數值(4, A, B, C)
? ? move(3, a, c, b):{? ? ? ? ? ? #c,b調換,實際數值(3, A, C, B), 將這四個值帶入move(3, a, b, c)遞歸1
? ? ? ? move(2, a, c, b):{? ? ? ? #c,b調換,實際數值(2, A, B, C), 將這四個值帶入move(2, a, b, c)遞歸2
? ? ? ? ? ? move(1, a, c, b):{? ? #c,b調換,實際數值(1, A, C, B), 將這四個值帶入move(1, a, b, c)遞歸3
? ? ? ? ? ? ? ? if n == 1:? ? ? ? #此時n==1,if條件成立
? ? ? ? ? ? ? ? print(a, '-->',c) #這是第一次打印A-->B
? ? ? ? ? ? }? ? ? ? ? ? ? ? ? ? ?#最近的一次遞歸3完成,回到遞歸2,實際數值(2, A, B, C)
? ? ? ? ? ? print(a, '-->', c)? ? #這是第二次打印A-->C
? ? ? ? ? ? move(1, b, a, c):{? ? #a,b調換,實際數值(1, B, A, C), 將這四個值帶入move(1, a, b, c)遞歸4
? ? ? ? ? ? ? ? if n == 1:
? ? ? ? ? ? ? ? print(a, '-->', c)#這是第三次打印B-->C? ? ? ??
? ? ? ? ? ? }? ? ? ? ? ? ? ? ? ? ?#最近的一次遞歸4完成,回到遞歸2,實際數值(2, A, B, C)
? ? ? ? }? ? ? ? ? ? ? ? ? ? ? ? ?#最近的一次遞歸2完成,回到遞歸1,實際數值(3, A, C, B)? ? ? ? ? ??
? ? ? ? print(a, '-->', c)? ? ? ? #這是第四次打印A-->B
? ? ? ? move(2, b, a, c):{? ? ? ? #a,b調換, 實際數值(2, C, A, B), 將這四個值帶入move(2, a, b, c)遞歸5
? ? ? ? ? ? move(1, a, c, b):{? ? #c,b調換, 實際數值(1, C, B, A), 將這四個值帶入move(1, a, b, c)遞歸6
? ? ? ? ? ? ? ? if n == 1:
? ? ? ? ? ? ? ? print(a, '-->', c)#這是第五次打印C-->A
? ? ? ? ? ? }? ? ? ? ? ? ? ? ? ? ?#最近的一次遞歸6完成,回到遞歸5,實際數值(2, C, A, B)
? ? ? ? ? ? print(a, '-->', c)? ? #這是第六次打印C-->B
? ? ? ? ? ? move(1, b, a, c):{? ? #a,b調換, 實際數值(1, A, C, B), 將這四個值帶入move(1, a, b, c)遞歸7
? ? ? ? ? ? ? ? if n == 1:
? ? ? ? ? ? ? ? print(a, '-->', c)#這是第七次打印A-->B
? ? ? ? ? ? }? ? ? ? ? ? ? ? ? ? ?#最近的一次遞歸7完成,回到遞歸5,實際數值(2, C, A, B)
? ? ? ? }? ? ? ? ? ? ? ? ? ? ? ? ?#最近的一次遞歸5完成,回到遞歸1,實際數值(3, A, C, B)
? ? }? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#最近的一次遞歸1完成,原參數中的move(n - 1, a, c, b)遞歸全部完成,實際數值(4, A, B, C)
? ? print(a, '-->', c)? #這是第八次打印A-->C,下面跟上面同樣的方式去理解,就不寫了,太累了。
? ? move(3, b, a, c):{
? ? ? ? move(2, a, c, b):{
? ? ? ? ? ? move(1, a, c, b):{
? ? ? ? ? ? ? ? if n == 1:
? ? ? ? ? ? ? ? print(a, '-->', c)? ?#這是第九次打印
? ? ? ? ? ? }
? ? ? ? ? ? print(a, '-->', c)#這是第10次打印
? ? ? ? ? ? move(1, b, a, c):{
? ? ? ? ? ? ? ? if n == 1:
? ? ? ? ? ? ? ? print(a, '-->', c)#這是第11次打印
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? print(a, '-->', c)? ?#這是第12次打印
? ? ? ? move(2, b, a, c):{
? ? ? ? ? ? move(1, a, c, b):{
? ? ? ? ? ? ? ? if n == 1:
? ? ? ? ? ? ? ? print(a, '-->', c)? ?#這是第13次打印
? ? ? ? ? ? }
? ? ? ? ? ? print(a, '-->', c)#這是第14次打印
? ? ? ? ? ? move(1, b, a, c):{
? ? ? ? ? ? ? ? if n == 1:
? ? ? ? ? ? ? ? print(a, '-->', c)#這是第15次打印
? ? ? ? ? ? }
? ? ? ? }? ??
? ? }
}
2018-11-18
把遞歸放這不是玩火呢
2018-11-07
還是沒懂啊
2018-10-31
這只是表現形式問題。這個問題難點一是遞歸本身,第二是表現形式。
第一,把解決問題的思路寫出來(遞歸)
第二,把思路里的每一步轉換成代碼(就是你說的難理解的點,在紙上標示出來或者斷點調試都可以)
2018-10-26
def move(n-1 , a,b,c),括號中為形參,子程序中不需要明確給定四個變量,
main中使用move()函數時括號中給出實參,四個及以內,main中引用時給出move(3,1,2,3),傳遞到函數中
n=3,a=1,b=2,c=3