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条。但是,有人可以告诉我它到底是如何实现的吗?就像,我想知道它正在做的每一步。
最佳答案
如果用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)
mystery(-1)= 1 //!(n> 0)
谜团(1)= 2 * 1 = 2
奥秘(3)= 4 * 2 = 8
奥秘(5)= 6 * 8 = 48
呼叫顺序:神秘(5),神秘(3),神秘(1),神秘(-1)
订单呼叫返回:神秘(-1),神秘(1),神秘(3),神秘(5)