这里的递归如何工作?

Dav*_*vid 11 java recursion fibonacci

代码1:

public static int fibonacci (int n){ 
    if (n == 0 || n == 1) { 
        return 1; 
    } else { 
        return fibonacci (n-1) + fibonacci (n-2); 
    }        
} 
Run Code Online (Sandbox Code Playgroud)

fibonacci如果你还没有完成解释它是什么,你怎么用?我已经能够理解在其他情况下使用递归,如下所示:

代码2:

class two 
{
    public static void two (int n) 
    {
        if (n>0) 
        {
            System.out.println (n) ;
            two (n-1) ;
        }
        else
        {
            return ;
        }
    } 

    public static void main (String[] arg) 
    {
        two (12) ;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,在代码2的情况下,n最终将达到它不满足的点,n>0并且该方法将停止递归调用自身.但是,在代码2的情况下,我不知道它是如何从1 n=1开始的,如果是起点2和3和5,依此类推.此外,我不知道该线如何return fibonacci (n-1) + fibonacci (n-2)工作,因为fibonacci (n-2)在某种意义上必须包含fibonacci (n-1)才能工作,但它还没有.

我正在看的这本书说它会起作用.它是如何工作的?

Rya*_*ior 12

好吧,把编译器实际对你的代码做的事情放在一边(这很糟糕,但很漂亮)以及CPU如何实际解释你的代码(同样),这是一个相当简单的解决方案.

请考虑以下文字说明:

要对编号的块进行排序

  1. 选一个随机区块.
  2. 如果它是唯一的阻止,停止.
  3. 将数字较小的块移动到左侧,向右移动较大的数字.
  4. 对较低编号的块进行排序.
  5. 排序编号较高的块.

当您收到说明4和5时,系统会要求您重新开始整个过程​​.但是,这不是问题,因为你仍然知道如何启动这个过程,当它最终完成时,你会得到一堆排序的块.你可以用纸条来说明这些说明,并且它们不会更难以遵循.

  • +1:我喜欢这种递归的解释.我的孩子可以这么简单,呃<grin>. (2认同)