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.
评估可以像这样理解
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)
被称为递归的基本条件.
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |