【问题标题】:difference between printing and returning recursive function in pythonpython中打印和返回递归函数的区别
【发布时间】:2014-07-30 09:23:45
【问题描述】:

在 Python 中编写递归函数时,使用“print”和“return”有什么区别?我理解将它们用于迭代函数时两者之间的区别,但没有看到任何押韵或理由说明为什么在递归函数中使用一个比另一个更重要。

【问题讨论】:

  • return 不是“打印并离开功能”。 return 与函数的调用者通信; print 发送整个程序的输出。这就像通过电子邮件将报告发送给老板和通过电子邮件发送给媒体之间的区别。

标签: python recursion printing return


【解决方案1】:

递归函数中 print 和 return 的区别类似于迭代函数中的区别。打印是直接输出给用户,返回是函数的结果。你必须在每一步都返回,否则函数将永远不会结束,你会得到一个错误。

例如-

def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n-1)

如果您使用 print 代替,该功能将永远不会结束。

【讨论】:

    【解决方案2】:

    我可能会补充一点,从函数式编程的角度来看,打印是一种副作用,因为它与返回有关。

    将编程视为数学的一部分。您的函数接受一组输入,对它们执行操作并返回计算。在这种情况下打印不是计算。它会导致与系统的 IO 交互以向用户提供输出。

    对于递归函数中的返回和打印,返回是唯一需要的操作。递归需要输入、可选的计算和测试。该测试定义是否将使用计算修改的输入再次调用该函数,或者修改的输入是否是整个方程的最终解。在这个过程中不需要打印,而且对于功能纯粹主义者来说,它在递归函数中确实没有位置(除非它的计算是要打印的)。

    【讨论】:

      【解决方案3】:

      真是个奇怪的问题。

      两者完全不同,它们在递归函数中的正确使用与在迭代函数中一样重要。您甚至可以说重要:毕竟,在迭代函数中,您只返回一次结果;但是在递归函数中,你必须在每一步都返回一些东西,否则调用步骤就没有什么可做的了。

      举例说明:例如,如果您在进行归并排序,则每个阶段的递归函数都必须返回已排序的子列表。如果它只是打印它而不返回它,那么调用者将不会让子列表排序,因此不能将两个排序的子列表合并为一个排序列表以进一步向上传递堆栈。

      【讨论】:

      • 请参阅ideone.com/qXY9oZ,了解不返回任何内容的递归函数示例。
      • @NoctisSkytower 但这不是你真正做过的事情,至少在 Python 中不会:你可以用纯粹的函数式语言来做,但在 Python 中我们有迭代。
      猜你喜欢
      • 1970-01-01
      • 2011-04-22
      • 2022-08-17
      • 2017-01-05
      • 2018-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多