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

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

函數的每一步到底是怎么執行的?

def?move(n,?a,?b,?c):
????if?n?==1:
????????print?a,?'-->',?c
????????return
????move(n-1,?a,?c,?b)???#1
????print?a,?'-->',?c
????move(n-1,?b,?a,?c)
move(4,?'A',?'B',?'C')

當執行到1的時候,是再次調用這個函數,還是print a, '-->', c?

接下來又執行哪一步?

正在回答

2 回答

遞歸函數形式如下:

① move(n,a,b,c)

if→print→return【返回打印,結束遞歸】

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

print【流程打印】

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


這時,我們假設n=3,執行步驟如下:

① move(3,A,B,C) 【a=A, b=B, c=C】

② move(2,A,C,B) 【a=A, c=C, b=B】

? ? ? ?②① move(2,A,C,B) 【等同于②,a=A, b=C, c=B】

? ? ? ?②② move(1,A,B,C) 【a=A, c=B, b=C】

? ? ? ? ? ? ? ? ?②②① move(1,A,B,C) 【等同于②②,a=A, b=B, c=C】

? ? ? ? ? ? ? ? ?執行if→print→return 【返回打印,第一行,結束②②遞歸】

? ? ? ?print 【流程打印,第二行,與②①、②②、②③為同一級】

? ? ? ?②③ move(1,C,A,B) 【b=C, a=A, c=B】

? ? ? ? ? ? ? ? ?②③① move(1,C,A,B) 【等同于②③,a=C, b=A, c=B】

? ? ? ? ? ? ? ? ?執行if→print→return 【返回打印,第三行,結束②③遞歸】

print 【流程打印,第四行,與①、②、③為同一級】

③ move(2,B,A,C) 【b=B, a=A, c=C】

? ? ? ?③① move(2,B,A,C) 【等同于③,a=B, b=A, c=C】

? ? ? ?③② move(1,B,C,A) 【a=B, c=C, b=A】

? ? ? ? ? ? ? ? ?③②① move(1,B,C,A) 【等同于③②,a=B, b=C, c=A】

? ? ? ? ? ? ? ? ?執行if→print→return 【返回打印,第五行,結束③②遞歸】

? ? ? ?print 【流程打印,第六行,與③①、③②、③③為同一級】

? ? ? ?③③ move(1,A,B,C) 【b=A, a=B, c=C】

? ? ? ? ? ? ? ? ?③③① move(1,A,B,C) 【等同于③③,a=A, b=B, c=C】

? ? ? ? ? ? ? ? ?執行if→print→return 【返回打印,第七行,結束③③遞歸,整個函數遞歸結束!】

具體移動步驟如下:

A --> C

A --> B

C --> B

A --> C

B --> A

B --> C

A --> C


數學公式表示如下:

若圓盤n=3,打印行數為2^0+2^1+2^2=7行;

同理,n=4,打印行數為2^0+2^1+2^2+2^3=15行;

同理,n=5,打印行數為2^0+2^1+2^2+2^3+2^4=31行,以此類推。

(如果有哪里說得不對的地方,可以一起討論一下)

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

qq_亂碼人生_0

老哥講的很好
2018-02-12 回復 有任何疑惑可以回復我~
#2

慕桂英0933980

好厲害
2018-05-02 回復 有任何疑惑可以回復我~
#3

溫純

看不懂,真的是好難理解啊,這一章不學行不行,腦殼疼
2018-06-07 回復 有任何疑惑可以回復我~

當n==1時,執行print?a,?'-->',?c然后執行return,此子函數結束;一層層執行,直到遞歸結束


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

舉報

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

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

進入課程

函數的每一步到底是怎么執行的?

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

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

幫助反饋 APP下載

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

公眾號

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