課程
/后端開發
/Python
/初識Python
最后的這個 print a, '-->', c 這個完全不理解 麻煩大神把整個程序解釋一下? 謝謝了。
2019-04-11
源自:初識Python 7-5
正在回答
寫錯了 是print a-->b
def move(n, a, b, c):
? ? if n ==1:
? ? ? ? print a, '-->', c? ? #1.1 一個圓盤直接從A放到C
? ? ? ? return
? ? move(n-1, a, c, b)? ? #2.1 先將n-1個盤從A放到B
? ? print a, '-->', c? ? ?#2.2 然后把A剩余的1個盤從A放到C
? ? move(n-1, b, a, c)? ? #2.3 最后把從A放到B的那n-1個盤從B放到C
? ??
move(3, 'A', 'B', 'C')
看備注感覺好簡單,但是這個程序運行的流程還得細細研究
move(4,a,b,c)
n=4 ,所以if不運行
運行 move(3,a,c,b)#目的是把3個盤子放到b
進入move(3,a,c,b)中,n'=n-1=3,if不運行
運行move(2,a,b,c)#目的是把2個盤子放到c
進入move(2,a,b,c)中,n''=n'-1=n-2=2,if不運行
運行move(1,a,c,b)#目的先把一個盤子放到a
n'''=1,運行if,打印出 print a-->c
move(3,'A','B','C')??
move(n,a,b,c) #第一次調用 傳值'A','B','C' 此時n=3,a='A',b='B',c='C'這幾個值在本次調用中都不變
? ? #if(n == 1) n=3不走
? ? move(n-1,a,c,b)? #調用主函數,傳值n=2,a='A',c='C',b='B',將值傳入,注意傳入的是值,將2,'A','C','B'按位置傳下去,也就是move(2,'A','C','B')?
? ? ? ? move(n,a,b,c) #此處進入第一層循環 用值a='A',b='C',c='B' 此時n=2,a='A',b='C',c='B'循環 這幾個值在本層調用中都不變
? ? ? ? if n ==1
? ? ? ? ? ? print(a,'-->',c)? ?# n!= 1? ?跳過
? ? ? ? ? ? return
? ? ? ? move(n-1,a,c,b)? ? #此時傳參 傳入 a=A ,b= C ,c=B? ?得到 a=Ab=Bc=C,? 即 move(1,A,B,C),進入第二層循環
? ? ? ? ? ? move(1,a,b,c)? #? ?用參? move(1,A,B,C)
? ? ? ? ? ? if n== 1
? ? ? ? ? ? ? ? print( # 此時n=1,打印 a-->c? ?即 A-->C
? ? ? ? ? ? ? ? return
? ? ? ? print(a , '-->', c)? ?# 此處回到第一層循環第一次遞歸,即 move(2,a,b,c)? 實參是 move(2,A,C,B),即打印 A-->B
? ? ? ? move(n-1,b,a,c)? ? ? ?#第二層循環最后一步, 實參是a=A,b=C,c=B ,則 move(1,=C,A,B)
? ? ? ? ? ? move(n, a,b,c)? ? # 用參 按位置 代入實參 move(1,=C,A,B)
? ? ? ? ? ? if n==1:
? ? ? ? ? ? ? ? print(a,'-->',c)? ?# n=1 打印 a-->c,? ?即C-->B
? ? ? ? ? ? ? ? return? ? ? ? ? ? ? ? ?##? return函數, 所以第二層執行完了,回到move(3, a, b, c)
? ? ? ? ? ??
? ? print (a , '-->', c)? ?#? 函數實參move(3,A,B,C)? ,即 打印 A-->C
? ? move(n-1, b, a, c)? ? ?# 傳參,move(2,B,A,C)
? ? ? ? move(2,a,b,c)? ? ? ?#? 用參得到 a= B? ,? b=A? , c=C? ?move(2,B,A,C)
? ? ? ? if n==1:
? ? ? ? ? ? print(a, '-->', c)? # n!= 1? ?跳過
? ? ? ? move(n-1, a, c, b)? ? # 傳入實參 move(2,B,A,C) 得到 move(1,B,C,A)
? ? ? ? ? ? move(n, a, b, c)? ? # 用參? move(1,B,C,A)
? ? ? ? ? ? ? ? print(a, '-->', c)? ? ? # n==1 打印 a-->c? ?即 B-->A
? ? ? ? print(a,'-->',c)? ? ? #即? ?B-->C
? ? ? ? move(n-1,b,a,c)? ?#? ?傳參 a= B? ,? b=A? , c=C,得出新函數 move(1,A,B,C)
? ? ? ? ? ? move(1,a,b,c)? ?# 用參
? ? ? ? ? ? if n==1:
? ? ? ? ? ? ? ? print(a,'-->',c)? # n=1 打印a-->c? ? 即 A-->C
你可以理解為有上面盤子的是A,有下面盤子的是C,空的那個是B,實際上是通過賦值一直在變的
第一個 move(n-1,a,c,b) 表示的是把底盤上面的n-1塊圓盤從 a移動到b
然后 再把底盤從 a 移動到 c? 即 print a--->c
第二個move(n-1,b,a,c) 表示把放在b上的n-1個圓盤移動到c上,實現了整個程序
而這個 move(4, 'A', 'B', 'C') 表示的是調用這個函數,把參數給傳遞進去。
Love牙牙
陳大隱
這個打印其實就是打印出每一個步驟啊,你每次傳進去的值是不一樣的,相當于,你把圓盤從哪一個柱子移動另外的一個柱子
舉報
學python入門視頻教程,讓你快速入門并能編寫簡單的Python程序
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2019-06-01
寫錯了 是print a-->b
2019-06-01
def move(n, a, b, c):
? ? if n ==1:
? ? ? ? print a, '-->', c? ? #1.1 一個圓盤直接從A放到C
? ? ? ? return
? ? move(n-1, a, c, b)? ? #2.1 先將n-1個盤從A放到B
? ? print a, '-->', c? ? ?#2.2 然后把A剩余的1個盤從A放到C
? ? move(n-1, b, a, c)? ? #2.3 最后把從A放到B的那n-1個盤從B放到C
? ??
move(3, 'A', 'B', 'C')
看備注感覺好簡單,但是這個程序運行的流程還得細細研究
move(4,a,b,c)
n=4 ,所以if不運行
運行 move(3,a,c,b)#目的是把3個盤子放到b
進入move(3,a,c,b)中,n'=n-1=3,if不運行
運行move(2,a,b,c)#目的是把2個盤子放到c
進入move(2,a,b,c)中,n''=n'-1=n-2=2,if不運行
運行move(1,a,c,b)#目的先把一個盤子放到a
n'''=1,運行if,打印出 print a-->c
2019-05-06
move(3,'A','B','C')??
move(n,a,b,c) #第一次調用 傳值'A','B','C' 此時n=3,a='A',b='B',c='C'這幾個值在本次調用中都不變
? ? #if(n == 1) n=3不走
? ? move(n-1,a,c,b)? #調用主函數,傳值n=2,a='A',c='C',b='B',將值傳入,注意傳入的是值,將2,'A','C','B'按位置傳下去,也就是move(2,'A','C','B')?
? ? ? ? move(n,a,b,c) #此處進入第一層循環 用值a='A',b='C',c='B' 此時n=2,a='A',b='C',c='B'循環 這幾個值在本層調用中都不變
? ? ? ? if n ==1
? ? ? ? ? ? print(a,'-->',c)? ?# n!= 1? ?跳過
? ? ? ? ? ? return
? ? ? ? move(n-1,a,c,b)? ? #此時傳參 傳入 a=A ,b= C ,c=B? ?得到 a=Ab=Bc=C,? 即 move(1,A,B,C),進入第二層循環
? ? ? ? ? ? move(1,a,b,c)? #? ?用參? move(1,A,B,C)
? ? ? ? ? ? if n== 1
? ? ? ? ? ? ? ? print( # 此時n=1,打印 a-->c? ?即 A-->C
? ? ? ? ? ? ? ? return
? ? ? ? print(a , '-->', c)? ?# 此處回到第一層循環第一次遞歸,即 move(2,a,b,c)? 實參是 move(2,A,C,B),即打印 A-->B
? ? ? ? move(n-1,b,a,c)? ? ? ?#第二層循環最后一步, 實參是a=A,b=C,c=B ,則 move(1,=C,A,B)
? ? ? ? ? ? move(n, a,b,c)? ? # 用參 按位置 代入實參 move(1,=C,A,B)
? ? ? ? ? ? if n==1:
? ? ? ? ? ? ? ? print(a,'-->',c)? ?# n=1 打印 a-->c,? ?即C-->B
? ? ? ? ? ? ? ? return? ? ? ? ? ? ? ? ?##? return函數, 所以第二層執行完了,回到move(3, a, b, c)
? ? ? ? ? ??
? ? print (a , '-->', c)? ?#? 函數實參move(3,A,B,C)? ,即 打印 A-->C
? ? move(n-1, b, a, c)? ? ?# 傳參,move(2,B,A,C)
? ? ? ? move(2,a,b,c)? ? ? ?#? 用參得到 a= B? ,? b=A? , c=C? ?move(2,B,A,C)
? ? ? ? if n==1:
? ? ? ? ? ? print(a, '-->', c)? # n!= 1? ?跳過
? ? ? ? ? ? return
? ? ? ? move(n-1, a, c, b)? ? # 傳入實參 move(2,B,A,C) 得到 move(1,B,C,A)
? ? ? ? ? ? move(n, a, b, c)? ? # 用參? move(1,B,C,A)
? ? ? ? ? ? if n==1:
? ? ? ? ? ? ? ? print(a, '-->', c)? ? ? # n==1 打印 a-->c? ?即 B-->A
? ? ? ? ? ? ? ? return
? ? ? ? print(a,'-->',c)? ? ? #即? ?B-->C
? ? ? ? move(n-1,b,a,c)? ?#? ?傳參 a= B? ,? b=A? , c=C,得出新函數 move(1,A,B,C)
? ? ? ? ? ? move(1,a,b,c)? ?# 用參
? ? ? ? ? ? if n==1:
? ? ? ? ? ? ? ? print(a,'-->',c)? # n=1 打印a-->c? ? 即 A-->C
? ? ? ? ? ? ? ? return
2019-04-25
你可以理解為有上面盤子的是A,有下面盤子的是C,空的那個是B,實際上是通過賦值一直在變的
2019-04-13
第一個 move(n-1,a,c,b) 表示的是把底盤上面的n-1塊圓盤從 a移動到b
然后 再把底盤從 a 移動到 c? 即 print a--->c
第二個move(n-1,b,a,c) 表示把放在b上的n-1個圓盤移動到c上,實現了整個程序
而這個 move(4, 'A', 'B', 'C') 表示的是調用這個函數,把參數給傳遞進去。
2019-04-11
這個打印其實就是打印出每一個步驟啊,你每次傳進去的值是不一樣的,相當于,你把圓盤從哪一個柱子移動另外的一個柱子