Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有人能给我解释一下为什么会给出这个输出吗? def递归(n): 如果n_Python - Fatal编程技术网

Python 有人能给我解释一下为什么会给出这个输出吗? def递归(n): 如果n

Python 有人能给我解释一下为什么会给出这个输出吗? def递归(n): 如果n,python,Python,我希望输出仅为9.0 把一个函数放到一个函数中到底是如何工作的? 也就是说,执行的流程是这段特定的代码吗?您正在打印m的值,每次递归调用,您都可以返回所指示的值,然后按如下方式打印: def递归(n): 如果n

我希望输出仅为9.0

把一个函数放到一个函数中到底是如何工作的?
也就是说,执行的流程是这段特定的代码吗?

您正在打印
m
的值,每次递归调用,您都可以返回所指示的值,然后按如下方式打印:

def递归(n):
如果n<10:
返回n
m=n/3
返回递归(m)
打印递归(243)

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

好吧,您认为是错误的


您有一个print语句,它在递归的每一个级别上执行,最后一个级别除外,因此这就是您得到的结果。

下面是发生的调用树:

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

recursion(243)

OUTPUT: 9.0
        27.0
        81.0
如您所见,所有print语句都是在调用
递归
之后执行的。 要仅将
9
作为输出,您应该在
返回之前的
if
中只使用
print(n)
,并删除所有其他
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,所以返回

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

这个结果是有意义的。

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

1 - Printing m of third round (9)
2 - Printing m of second round (27)
3 - Printing m of third round (81)
def递归(n):
如果n<10:
打印(n)
返回
m=n/3
递归(m)
这些代码将只打印9.0

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

def recursion(n):
    if n < 10:
        print(n)
        return
    m = n/3
    recursion(m)
def递归(n):
打印(“堆叠”)
如果n<10:
打印(n)
返回
m=n/3
递归(m)
打印(“取消堆叠”)

请将您的代码格式化为代码,这样我们可以更容易地阅读。为什么您希望输出仅为9.0?函数正在进行递归调用。将代码格式化为更清晰的格式我对这个问题投了赞成票,因为递归不容易理解,而且我自己在使用它时犯了足够多的错误。
def recursion(n):
    print("stacking")
    if n < 10:
        print(n)
        return
    m = n/3
    recursion(m)
    print("unstack")