def name(n):
if n>0:
name(n-1)
name(n-1)
print(n)
name(5)
這是如何產生 1,1,2,1,1,2,3 ......等輸出的?就像哪個功能首先作業或兩個同時作業以及 n 是如何這樣列印的。
uj5u.com熱心網友回復:
嘗試使用較小的數字。例如,如果你運行name(1)它只會列印 1。因為中間的兩個函式只會回傳。如果你寫name(2)它會運行第一個內部函式,它會列印 1(就像我之前說的)。第二個函式將執行相同的操作,最后一條陳述句將列印 2。因此輸出為1 1 2. 如果你去,name(3)它將與name(2)兩次相同,但最后會列印 3 (1 1 2) (1 1 2) 3。name(4)會做name(3)兩次,最后列印 4 等等
uj5u.com熱心網友回復:
另一種看待這個問題的方法是相反的。例如。你看最小的數字:
name(0): 什么都不列印,因此 ""name(1): 呼叫 name(0) 兩次,然后列印1,因此"1"name(2): 呼叫 name(1) 兩次,然后列印2,因此"112"name(3): 在列印之前呼叫 name(2) 兩次3,因此"1121123"name(4): 在列印之前呼叫 name(3) 兩次4,因此"112112311211234"name(5): 在列印之前呼叫 name(4) 兩次5,因此"1121123112112341121123112112345"
最后的線索是沒有對遞回函式的特殊處理。對函式的每次呼叫,甚至print,都將等待它回傳,然后在下一行繼續,只要陳述句不包含return它會回傳的 a 。該名稱(5)最終以不同版本的不同版本呼叫自己n是沒有問題的,因為它們每個人都有自己的版本,該版本n對于該呼叫是唯一的。
uj5u.com熱心網友回復:
您好,我附上了這張圖片,詳細說明了

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/495657.html
上一篇:遞回演算法的記憶問題
下一篇:提交按鈕不適用于JS驗證
