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)

10-08 13:28