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

时间:2015-02-10 17:06:10

标签: java recursion

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.但是,有人可以告诉我它到底是怎么回事吗?就像,我想知道它正在做的每一步。

2 个答案:

答案 0 :(得分:2)

如果你用mystery()拨打n<=0它会返回1,在所有其他情况下,它会递归调用自己,所以第一次将要返回的神秘调用将返回1,即叫它接下来会回来,依此类推:

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

电话顺序:神秘(5),神秘(3),神秘(1),神秘(-1)

订单回叫:神秘(-1),神秘(1),神秘(3),神秘(5)

答案 1 :(得分:0)

**

  • 工作原理:

**

//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 自我调用时,返回的参数不同。

例如像树一样看待它:

               the actually iMethod

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