如何理解这种递归代码?

-2 java int recursion return

int j(int i) {
    if (i==0) return 2;
    return i*j(i-1);
}
Run Code Online (Sandbox Code Playgroud)

打电话j(4)给48.

我觉得我理解代码,但不知道48是如何实现的.

这是我解释它的方式,

int j(4){
Run Code Online (Sandbox Code Playgroud)

4不等于0所以它不会返回2

4*j(i-1) = 4*j(3)
Run Code Online (Sandbox Code Playgroud)

然后我回到顶部并重复

3*j(2)
2*j(1)
1*j(0)
Run Code Online (Sandbox Code Playgroud)

现在我回来2.

这是丢失的地方,我不太确定在这一步之后该怎么做以及j(4)的答案是48.

the*_*eye 5

评估可以像这样理解

j(4)
4 * j(3)
4 * (3 * j(2))
4 * (3 * (2 * j(1)))
4 * (3 * (2 * (1 * j(0))))   // When input to j is 0, returns 2
4 * (3 * (2 * (1 * 2)))
4 * (3 * (2 * 2))
4 * (3 * 4)
4 * 12
48
Run Code Online (Sandbox Code Playgroud)

直到递归到达j(0),它越来越深.但当它到达它时,它开始解除递归.最重要的是,

if (i==0) return 2;
Run Code Online (Sandbox Code Playgroud)

被称为递归的基本条件.