递归澄清

时间:2016-09-26 00:13:48

标签: java recursion

我只是想确保我在递归时完全稳固。我在一堆应用程序中使用它,但意识到当有人要我定义它时(一个新的程序员问这个),我对定义有点不稳定并且在解释它时遇到了一些麻烦。我只是想联系一个大型的编程社区,以确保我走在正确的轨道上。

据我所知,计算机科学中的递归是指对某个特定问题或检查(即if语句)的某些答案依赖于与同一方法相关的其他内容。解决这个问题的方法可能是调用自身的函数(大多数编程语言都支持)。我在下面写了一个简单的Fibonacci程序:

public int fib(int n) {
    if(n <= 1) {
        return n;
    } else {
        return fib(n - 1) + fib(n - 2);
    }
}

如果我走在正确的轨道上,请告诉我。此外,我知道在递归方面也存在类似的问题,但请不要将此问题视为重复,因为这是一个更普遍的问题,不仅限于特定的语言,而是更多关于递归的概念。

谢谢,

brld

1 个答案:

答案 0 :(得分:2)

你走在正确的轨道上。我会将其分解成碎片:

  1. 定义:通过字典定义,递归是一个调用自身的过程。这个调用通常是直接的,如你的例子,但也可以是间接的:f1和f2相互调用,但不能自己调用​​。
  2. 示例:正如您所做的那样......使用易于理解的递归定义显示一个众所周知的函数。我通常使用factorial,因为它只有一个递归调用;然后我提出斐波纳契案。
  3. 力学:描述基础案例的关键属性(最终使它停止的原因)和简化(在重复之前减少问题)。
  4. 正确使用:几乎任何带有递归描述的真实编程应用程序都会有一个迭代(循环)解决方案,它需要较少的计算时间。但是,如果自然描述是递归的,那么从长远来看高效解决方案很可能是递归的。除了执行周期外,还要考虑维修和维护资源,并记住FLOPS每个月都会变得更便宜。