递归函数中的Python返回命令

递归函数中的Python返回命令,python,recursion,return,output,Python,Recursion,Return,Output,在学习Python和浏览互联网时,我在w3schools.com上偶然发现了一段代码。我尝试使用他们的内置站点pythonidle和我自己的python3.9.0Shell运行它。我得到的是两种不同的输出 我想知道哪个输出是正确的输出,为什么它提供两种不同的输出。 代码及其输出 内置站点Python空闲 Python 3.9.0 Shell 请注意,当使用内置站点Python IDLE运行代码时,数字21只打印(输出)一次,而当使用Python 3.9.0 Shell运行代码时,数字21打印

在学习Python和浏览互联网时,我在w3schools.com上偶然发现了一段代码。我尝试使用他们的内置站点pythonidle和我自己的
python3.9.0
Shell运行它。我得到的是两种不同的输出

我想知道哪个输出是正确的输出,为什么它提供两种不同的输出。

代码及其输出

内置站点Python空闲

Python 3.9.0 Shell

请注意,当使用内置站点Python IDLE运行代码时,数字21只打印(输出)一次,而当使用Python 3.9.0 Shell运行代码时,数字21打印(输出)两次

我自己的调试

我尝试了一个简单的打印语句调试。检查结果只有一个不同,使用Python 3.9.0 Shell执行最后一个返回行并输出最后一个结果,而使用内置站点Python IDLE,最后一个返回要么未执行,要么未输出,在这种情况下,我相信是前者,我相信正确的输出是Python 3.9.0 Shell,但我不知道为什么会有两种不同的输出

源代码

def tri_recursion(k):
    if(k>0):
           result = k + tri_recursion(k-1)
           print(result)
    else:
           result = 0
    return result

tri_recursion(6)

您在末尾添加了一个
返回结果
语句。对于任何IDE,除非打印该值,否则不会显示该值。但是,IDLE也会打印返回值。从技术上讲,两个输出都是正确的,因为两个口译员都配置为执行不同的操作。作为一个小例子

def foo():
    return(1)
在IDLE上运行
foo()
会给出
>>1
,而在其他IDE上则不会给出任何结果,因为没有打印语句

这两种方法都是正确的

站点上的内置python向您显示程序执行的输出。这相当于运行以下程序:

if __name__ == '__main__':
    tri_recursion(6)
在代码末尾添加此项,将其另存为test.py并按如下方式运行:

python test.py
结果是一样的

pythonshell向您显示REPL(Read-Eval-Print循环)的输出,Print语句将打印到屏幕上,但函数的返回值也会打印出来,因为REPL,所以无法避免这种情况,这是出于设计


您可以将函数设计为不返回任何内容,但它不再是递归的。

两者都是正确的。您需要了解python shell正在打印语句的输出。 当你写作时:

三重递归(6)

它将首先执行所有print inside函数,然后打印最后一次调用返回的值。

类似于
tri\u递归(6)
的行将在交互式shell中输出表达式的值。在脚本中运行时,它不会有这样的副作用。使用
print(tri_recursion(6))
时,两者的输出相同。如果有小代码段,请将它们添加到问题中。当它们很大时,您可以从github或类似网站链接要点。无法复制粘贴图像中的代码以复制您的problem@schwobaseggl我想你是对的。请将其添加为answer@schwobaseggl,谢谢你的回复,我想你答对了。@TeshanShanukaJ,谢谢你的回复,我在使用小代码段时遇到了麻烦。它一直告诉我代码格式有误,我现在就尝试编辑它。