[英]Can someone explain to me why this output is given?
def recursion(n):
if n < 10:
return
m = n/3
recursion(m)
print(m)
recursion(243)
OUTPUT: 9.0
27.0
81.0
我希望 output 僅為 9.0...
將 function 放入 function 究竟如何工作? 即它的執行流程是這段特定的代碼嗎?
這是發生的事情的調用樹:
recursion(243)
recursion(81)
recursion(27)
recursion(9)
return
print(9)
print(27)
print(81)
正如你所看到的,所有的 print 語句都是在所有對recursion
的調用之后執行的。 要僅將9
作為 output,您應該在return
之前的if
中使用print(n)
並刪除所有其他print
。
您在每次遞歸調用時打印m
的值,您可以返回 insted 的值,然后按如下方式打印:
def recursion(n):
if n < 10:
return n
m = n/3
return recursion(m)
print recursion(243)
您的print(m)
語句是每個遞歸步驟的一部分,不僅是最后一個,因此它們都將打印它們的當前值m
。 如果只希望它打印最后一步,請將print
語句放在return
語句之前(進入 break 條件)。
好吧,你期待錯了。
你有一個 print 語句,它在遞歸的每個級別上執行,除了最后一個,這就是你得到的。
第一輪:n = 243 所以大於 10 m = 243/3 = 81
第二輪:n = 81 所以大於 10 m = 81/3 = 27
第三輪:n = 27 所以大於 10 m = 27/3 = 9
第四輪:n = 9 它小於 10 所以返回
1 - Printing m of third round (9)
2 - Printing m of second round (27)
3 - Printing m of third round (81)
這個結果是有道理的。
您正在遞歸調用您的 function 並打印之前堆疊的數字,如果您只想看到最后一個數字,則必須將打印放在
def recursion(n):
if n < 10:
print(n)
return
m = n/3
recursion(m)
這些代碼將僅打印 9.0
如果您想查看 function 的流程,請使用這些,您必須查看跟蹤
def recursion(n):
print("stacking")
if n < 10:
print(n)
return
m = n/3
recursion(m)
print("unstack")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.