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。
答案 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