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

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

看不懂以下代碼是如何運作的,求直觀、明了、清晰的解釋。

def move(n, a, b, c):

? ? if n == 1:

? ? ? ? print a , '-->' , c

? ? ? ? return?

? ? move(n - 1 , a , c , b)

? ? print a , '-->' , c

? ? move(n - 1 , b , a , c)

move(4, 'A', 'B', 'C')


正在回答

2 回答

先理解兩種情況,一是只有一個積木,二是有兩個積木。

一個積木時,print a,'-->',c 這個比較好理解,直接把a上的積木移到c上。

這時,前四行的代碼可以理解了,剩下三行的代碼,可以理解為兩塊積木的情況。

兩塊積木時,先把a移到b,再把a移到c,最后把b移到c。一定要先理解規則。

此時,根據n==1時的定義,move(n, a, b, c)中,a移到c,也就是第二個元素移動到第四個元素。

所以a移動到b,表達為move(n - 1 , a , c , b),

然后,a移動到c,表達為move(1 , a , b, c),也就是print a , '-->' , c,

最后,b移動到c,表達為move(n - 1 , b , a , c)

大于兩塊積木的,把除了最底下的積木,認為是完整的第二塊積木就可以了,這就是遞歸函數。

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

慕移動4045710

看到這回答懂了,很到位 def shunjianyidong(n,a,b,c): if n==1: print a,'-->',c return shunjianyidong(n-1,'ant','cat','boy') print a,'-->',c shunjianyidong(n-1,'boy','ant','cat') shunjianyidong(2, 'ant','boy','cat’) 然后我自己改寫了一下
2020-04-10 回復 有任何疑惑可以回復我~
#2

慕移動4045710 回復 慕移動4045710

改寫之后邏輯有點變了,具體便在哪里呢?
2020-04-10 回復 有任何疑惑可以回復我~

個人理解:

move(n, a, b, c)首先要理解這個函數的定義
例如有A,B,C 三個柱子,n表示A柱子上的木塊

這個move函數就是把A柱子上的n個木塊移動到C柱子上
把前面n-1個木塊看成整體,那么
第一:A柱上面的n-1個木塊移動到B柱
第二:A柱上面最后一個木塊移動到C柱

第三:B柱上面的n-1個木塊移動到C柱
換成函數表達就是

move(n-1,a,c,b)
print a,'-->',c

move(n-1,b,a,c)

遞歸就這樣完成

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

小白萌新up

這個游戲規則我是明白了,你解釋的我也看明白了,就是不懂,為啥分別是move,print ,move,能給解釋一下嘛
2020-04-05 回復 有任何疑惑可以回復我~

舉報

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

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

進入課程

看不懂以下代碼是如何運作的,求直觀、明了、清晰的解釋。

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

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

幫助反饋 APP下載

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

公眾號

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