有人可以向我解释为什么给出这个输出吗?

时间:2021-03-19 09:22:42

标签: python

def recursion(n):
    if n < 10:
        return
    m = n/3
    recursion(m)
    print(m)

recursion(243)

OUTPUT: 9.0
        27.0
        81.0

我希望输出仅为 9.0...

将函数放入函数中究竟是如何工作的? IE。这段特定代码的执行流程是什么?

6 个答案:

答案 0 :(得分:3)

这是发生了什么的调用树:

recursion(243)
  recursion(81)
    recursion(27)
      recursion(9)
          return
      print(9)
    print(27)
  print(81)

如您所见,所有打印语句都在所有调用 recursion 之后执行。 要仅将 9 作为输出,您应该在 print(n) 之前的 if 中使用 return,并删除所有其他 print

答案 1 :(得分:0)

您在每次递归调用时都打印 m 的值,您可以返回插入的值,然后将其打印如下:

def recursion(n):
    if n < 10:
        return n
    m = n/3
    return recursion(m)

print recursion(243)

答案 2 :(得分:0)

您的 print(m) 语句是每个递归步骤的一部分,不仅是最后一步,因此它们都将打印其当前的 m 值。如果只希望它打印最后一步,请将 print 语句放在 return 语句之前(放入中断条件)。

答案 3 :(得分:0)

好吧,你猜错了。

您有一个打印语句,它在递归的每个级别上执行,除了最后一个,这就是您得到的。

答案 4 :(得分:0)

第一轮: n = 243 所以它大于 10 米 = 243/3 = 81

第二轮: n = 81 所以它大于 10 米 = 81/3 = 27

第三轮: n = 27 所以它大于 10 米 = 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)

这个结果是有道理的。

答案 5 :(得分:0)

您正在递归调用您的函数并打印之前堆叠的数字,如果您只想看到最后一个数字,则必须将打印放在 if 上

def recursion(n):
    if n < 10:
        print(n)
        return
    m = n/3
    recursion(m)

这些代码只会打印 9.0

如果您想查看函数的流程,请使用这些,并且必须查看跟踪

def recursion(n):
    print("stacking")
    if n < 10:
        print(n)
        return
    m = n/3
    recursion(m)
    print("unstack")