谁能告诉我这种递归方法是如何工作的?
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;
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
- 神秘(1) = (1+1) * 神秘(1-2) = 2 * 神秘(-1)
- 谜(3) = 4 * 2 = 8
- 神秘(3) = (3+1) * 神秘(3-2) = 4 * 神秘(1)
- 谜(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;