如何理解这种递归代码?

时间:2014-04-30 05:29:50

标签: java recursion int return

int j(int i) {
    if (i==0) return 2;
    return i*j(i-1);
}

调用j(4)会给出48。

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

这是我解释它的方式,

int j(4){

4不等于0,因此它不会返回2

4*j(i-1) = 4*j(3)

然后我回到顶部并重复

3*j(2)
2*j(1)
1*j(0)

现在我返回2.

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

4 个答案:

答案 0 :(得分: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

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

if (i==0) return 2;

被称为递归的基本条件。

答案 1 :(得分:4)

j(0)明确返回2,对吧?

因此j(1)返回1*j(0)j(0)为2.所以j(1)会返回2*1或2。

j(2)会返回2*j(1)2*2或4。

j(3)会返回3*j(2)3*4或12。

j(4)返回4*j(3)4*12或48。

答案 2 :(得分:0)

所以这是在调用

返回4 * 3 * 2 * 1 * 0(不能不使用0)

结果48

答案 3 :(得分:0)

你可以追踪它:

j(4) = 4 * j(3) = 4 * (3 * j(2)) = 4 * 3 * 2 * j(1) 
     = 4 * 3 * 2 * 1 * j(0) = 4 * 3 * 2 * 1 * 2 = 48