2017-08-14 83 views
0

我是cs的新手,我在理解Python中的递归内容时遇到了一些小问题。Python递归了解问题

我有3个问题想问,或者确认我是否正确理解内容。

1:我不确定在递归中使用基本情况的目的。基本情况是否能够在我的程序中终止递归?

2:假设我的递归调用高于我的程序的任何其他代码。程序是否会首先运行递归,然后在递归之后运行内容?

3:如何以合理的正确率正确跟踪递归?我个人认为追踪递归非常困难,我几乎无法在网上找到一些指令。

感谢您回答我的问题。

+1

1.基本情况是递归的终端情况。 2.是的,递归调用必须在继续之前终止并完全展开堆栈。 3.调用堆栈中的深度对于调试通常很有用,您可以添加一个额外的参数来保存诊断打印的深度。 – AChampion

回答

1
  1. 是的。这个想法是,递归调用将继续调用自己(使用不同的输入),直到它调用基本情况(或许多基本情况之一)。基本案例通常是解决问题的小问题,并且不依赖于问题的任何其他部分。然后,它会通过回答问题的最简单版本来回答问题。

  2. 是的。与来自外部的递归函数进行交互与与任何其他函数进行交互完全相同。

  3. 取决于您写的内容以及调试工具的舒适程度。如果您试图追踪在递归调用之间来回传递哪些值,则函数开始处的所有参数和最后的返回值可能会让您感觉很不舒服。

围绕这个东西包装头的最简单的方法是写一些你自己的头。从一些基本的例子开始(经典是阶乘函数),如果遇到困难,请寻求帮助。

编辑:如果你更关注数学,你可能会查找数学归纳(无论如何,你将学习它作为cs教育的一部分)。这是完全相同的概念,只是教学有所不同。

+0

我知道这个问题是针对Python的,但是,如果你知道一种语言,你就知道它们全部。我学习递归的方式是这个网站http://codingbat.com/java/Recursion-1。你甚至可以在Python中写出问题并学习一些单元测试:) –

+0

@JohnHamlettIV这是一个很好的观察结果,我没有在我的答案中提到。递归是语言不可知的,任何试图了解它的人都应该意识到这一点。 (我将把'python'标签置于这个问题之外,你说得对,它不属于) –