谁能告诉我这种递归方法是如何工作的?

Can anyone tell me how this Recursion method works?

public class Recursion
{
    public static int mystery(int n)
    {
        if(n>0)
        {
            return (n+1)*mystery(n-2);
        }
        else
        {
            return 1;
        }
    }

    public static void main(String[] args)
    {
        int x;
        x = mystery(5);
        System.out.println(x);
    }
}

我是Java的新手。现在,它打印出 48。但是,有人能告诉我它是如何做到这一点的吗?比如,我想知道它正在执行的每一步。

如果你用n<=0调用mystery()它会return1,在所有其他情况下,它会递归调用自己,所以神秘的第一个调用会return,将 return 1,调用它的那个将 return 接下来,依此类推:

  • 神秘(5) = (5+1) * 神秘(5-2) = 6 * 神秘(3)
    • 神秘(3) = (3+1) * 神秘(3-2) = 4 * 神秘(1)
      • 神秘(1) = (1+1) * 神秘(1-2) = 2 * 神秘(-1)
        • 神秘(-1) = 1 // !(n>0)
      • 谜(1) = 2 * 1 = 2
    • 谜(3) = 4 * 2 = 8
  • 谜(5) = 6 * 8 = 48

调用顺序:mystery(5)、mystery(3)、mystery(1)、mystery(-1)

订单调用 return:mystery(-1)、mystery(1)、mystery(3)、mystery(5)

**

  • 工作原理:

**

//main method

public static void main(String[] args){

iMethod(0);

}

 public int iMethod(int c){

  if(c>=20){
    System.out.println("I finished  with c= "+c);
    return;
  }else if(c<20)
    return iMethod(c=c+5);

 }

正在使用 (c=0) 进入 iMethod:

1.enter second else if(c<20)

  it will go to iMethod(5) cause c now is 5

2.enter second else if(c<20)

 it will go to iMethod(10) cause c now is 10

..

3.iMethod(15)

4.enter the first if(c>=20)

 it prints 'I finished with c=20' and then return;

回到实际调用的方法

[在这个例子中它是从 public static void (String[] args)]

实际上每次方法 iMethod 都使用来自 return.[=14= 的不同参数调用自身 ]

例如把它看成一棵树:

               the actually iMethod

                     |
                  called her self
                     |
                  called her self
                     |
                   ......
                   finish somewhere and return;