在Python中编写递归函数时,使用“print”和“return”之间有什么区别?我理解两者在将它们用于迭代函数时的区别,但是没有看到任何押韵或理由为什么在递归函数中使用一个而不是另一个更重要。
答案 0 :(得分:2)
多么奇怪的问题。
这两者完全不同,它们在递归函数中的正确使用与迭代函数一样重要。你甚至可以说更多重要:毕竟,在迭代函数中,你只返回一次结果;但是在递归函数中,你必须在每一步都返回一些东西,否则调用步骤就无法工作了。
举例说明:例如,如果您正在进行mergesort,则每个阶段的递归函数必须返回已排序的子列表。如果它只是打印它而不返回它,那么调用者将不会获得子列表进行排序,因此不能将两个已排序的子列表合并到一个排序列表中以进一步向上传递。
答案 1 :(得分:1)
我可以补充说,从功能编程的角度来看,print是一种副作用,因为它与return有关。
将编程视为数学的一个范围。您的函数接受一组输入,对它们执行操作并返回计算。在这种情况下打印不是计算。它导致与系统IO的交互,以向用户提供输出。
对于递归和打印的递归函数,返回是唯一需要的操作。递归需要输入,可选计算和测试。该测试定义是否将使用计算修改的输入再次调用该函数,或者修改的输入是否是整个方程的最终解。在这个过程中没有需要打印的地方,并且根据功能纯粹主义者,它在递归函数中确实没有位置(除非它的计算是要打印的)。
答案 2 :(得分:0)
递归函数中打印和返回之间的差异类似于迭代函数中的差异。打印是直接输出给用户,返回是该功能的结果。你必须在每一步返回,否则函数将永远不会结束,你将收到错误。
例如 -
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)
如果你使用了print,那么函数永远不会结束。