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

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

程序沒看懂 輸出的答應是看懂了

https://img1.sycdn.imooc.com//5cae878b00014e0703060166.jpg

最后的這個 print a, '-->', c 這個完全不理解 麻煩大神把整個程序解釋一下? 謝謝了。

正在回答

6 回答

寫錯了 是print a-->b

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

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

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


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


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

你可以理解為有上面盤子的是A,有下面盤子的是C,空的那個是B,實際上是通過賦值一直在變的

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

第一個 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') 表示的是調用這個函數,把參數給傳遞進去。


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

Love牙牙

求問,move(4, 'A', 'B', 'C'),這里參數4,是不是代表有4塊圓盤?4塊圓盤的移動,這三步感覺沒完成啊,怎么實現的?遞歸嗎
2019-04-26 回復 有任何疑惑可以回復我~
#2

陳大隱

回復 Love牙牙就是通過遞歸實現的呀,參數4就是表示4塊圓盤。 你只需要知道可以這樣實現,并不需要知道它們內部是如何實現的。
2019-04-27 回復 有任何疑惑可以回復我~

這個打印其實就是打印出每一個步驟啊,你每次傳進去的值是不一樣的,相當于,你把圓盤從哪一個柱子移動另外的一個柱子

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

舉報

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

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

進入課程

程序沒看懂 輸出的答應是看懂了

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

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

幫助反饋 APP下載

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

公眾號

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