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

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

不是很懂其中的過程

執行的結果為什么是下面這樣?

?A --> B?

A --> C?

B --> C?

A --> B?

C --> A?

C --> B?

A --> B?

A --> C?

B --> C?

B --> A?

C --> A?

B --> C?

A --> B?

A --> C?

B --> C

正在回答

3 回答

那好,我就講輸出的順序了,這個遞歸函數你要明白,只有if條件滿足時,才會輸出,而滿足條件的唯一條件時n=1,讓n=1的函數只能是move(1,a,c,b)和move(1,b,a,c),這兩個怎么來的,從第一個move(4,a,b,c)推導就知道了,當滿足了第一個move(1,a,c,b),你就可以按照定義的函數執行語句順序來了,接著print a,'-->',c,注意這里a和c只是把a和c位置上的數輸出,不是a與c。再接著move(1,b,a,c),然后這個時候你要意識到,你只是完成了move(2,a,b,c)的輸出,接著在move(3,```,```,```)這個函數體內,你有接著像move(1)一樣輸出move(2)了。后面其他也是這樣。

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

慕后端9246718

謝謝,圖片+文字后很受用
2018-08-15 回復 有任何疑惑可以回復我~

算了,圖片略大,上傳不了,有心想學會遞歸的人可以移步網盤,不難。

鏈接為https://pan.baidu.com/s/1tSxvKxeC9qxZdb7vWlKI7Q,無密碼。

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

醬醬kay

圖片的幫助很大,我還有一個問題,就是輸出的順序不太理解,能再解釋一下嗎?
2018-07-17 回復 有任何疑惑可以回復我~
#2

sunny超1 回復 醬醬kay

在我的新回答中有回復,你可以看看。
2018-07-17 回復 有任何疑惑可以回復我~

/*下個回答附上圖片*/

def move(n,a,b,c):? //這里是函數的定義部分,有四個形參,分別對應圓盤個數,a位置的圓盤名字,b位置的圓盤名字,c位置的圓盤名字它可以不是A,也可是A,后面兩個同理

if n==1:? //判斷n的值是否符合,符合才執行

????print a,'-->',c//將a位置的圓盤名字和c位置的圓盤名字輸出

????return //返回值為空,不加返回內存會溢出,程序不停止而超時

move (n-1,a,c,b)//這里函數調用自身,你可能會疑惑它要怎樣輸出,但你現在先要進入這個函數的運算,才能執行下一步,然后它就會反復判斷,一直到n=1,這時候你的move(2,a,b,c)遞歸是這樣子滴,

/*??? def move(2,a,b,c):

????????????if n==1:

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

????????????????????return

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

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

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

*/

而你要清楚n=1,函數值return none,釋放內存,程序終止不再執行后面語句,所以move(1,a,c,b)函數輸出為

A-->B,接著在move(2,a,b,c)函數體中,接著print a,'-->',c執行語句,輸出為A--C,再接著move(1,b,a,c),有輸出為B-->C,此時move(2,a,b,c)語句結束。

為什么我會說是語句呢?別忘了,這個move(2,a,b,c)只是在move(3,a,c,b)“函數體”中的一個語句而已,既然move(2,a,b,c)語句結束,那后面接著print a,'-->',c執行語句,注意此時的函數體為move(3,a,c,b),所以輸出為A-->B,后面接著move(2,c,a,b)語句,輸出的方法和前面move(2,a,b,c)相同,但結果不同。

所以,如果要理解遞歸,你要抽絲剝繭,找到循環終止的位置,從終止的位置出發,一直到你開始的地方,結合后面圖片,理解應該更好點。

講的不好,請見諒。


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

凌噬G靈釋

很用心!幫了大忙了,感謝。
2018-08-13 回復 有任何疑惑可以回復我~

舉報

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

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

進入課程

不是很懂其中的過程

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

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

幫助反饋 APP下載

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

公眾號

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