簡體   English   中英

有人可以向我解釋為什么給出這個 output 嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM