什么是递归

Ral*_*lph 4 java recursion

可能重复:
递归函数的示例

我一直在努力研究编程中的递归作为一个概念(虽然我专门研究Java),这就是我最了解的东西:

例如,在现实生活中,递归是指我们将两个镜子放在彼此面前并且它们之间产生的图像是递归的.

但我没有在编程中得到这个算法?有人能给我一个简化的例子来理解递归吗?

Ode*_*ded 19

递归是一种编程技术,其中方法可以将自身称为其计算的一部分(有时您可以使用多个方法 - 这些方法通常会循环调用彼此).

一个流行的例子是计算斐波纳契数:

public static long fib(int n) {
    if (n <= 1) return n;
    else return fib(n-1) + fib(n-2);
}
Run Code Online (Sandbox Code Playgroud)

这两个基本组件是基本案例(n<=1在示例中)和递归案例.

在创建递归算法时,您需要考虑基本情况以及如何使用递归情况,您将获得基本情况(否则您最终会得到无限递归并打击堆栈).


Chr*_*nce 6

基本上,函数是递归的

  1. 函数有一个简单的基本情况,何时
  2. 所有其他情况都有规则,减少到基本情况.

例如,要计算阶乘:

public static long factorial(int i)
{
    // This is the base case
    if(i == 0)
    {
         return 1;
    }
    else
    {
        // This reduces the problem to something closer to the base case
        return i * factorial(i - 1);
    }
}
Run Code Online (Sandbox Code Playgroud)