正确阅读递归函数

时间:2017-03-08 16:05:49

标签: recursion

我目前正在自学编程,而且我已经开始介绍递归函数了。我理解它们背后的基本原理但是每当我尝试读取包含递归函数的代码时,我都很难跟踪它们。老实说,如果我不在纸上写下整个功能并手动遵循它,我就无法理解它的作用,我无法在心理上遵循它就是我所说的。你能提供一些如何在精神上做到这一点的提示吗?我几乎是平均智商(智商117),也许这就是问题所在?提前谢谢。

2 个答案:

答案 0 :(得分:0)

我认为智商并不重要。无论如何,我认为这都是关于练习的。尝试编写一些递归函数。经过大量的练习和经验,你会发现它更容易理解。

有一些good ideas。 祝好运。

答案 1 :(得分:0)

我认为这是一个很好的问题。许多人犯了错误,试图遵循递归函数的调用堆栈,这是错误的方法。

我发现唯一的方法是查看所写的内容,并问自己它是否在逻辑上是正确的以及它是否会结束。如果这些事情是真的,它就会起作用而你真的不需要理解。

更详细:

  1. 是否考虑了所有可能的输入值?
  2. 每种情况下的陈述都是真的吗?
  3. 是否存在(有)值,此时函数不会递归?
  4. 所有剩余的输入值最终会导致该值吗?
  5. 例如(伪代码):

    factorial(n):
        if (n < 0) throw InvalidArgument
        if (n == 0) return 1
        else return factorial(n - 1) * n
    

    涵盖所有输入值。这些陈述是真实的。存在一个不递归的值(&lt; = 0),并且所有剩余值减少1直到达到退出值。因此它有效。

    你当然可能会在思考上犯错误。一个好的IQ在这里有帮助,你可能需要在某个时候采用跟踪或调试来检查你的假设并在你的逻辑中找到错误,但这不应该是第一种方法。

    这就是递归解决方案之美:它们往往是事实陈述而非程序性指示!