【发布时间】:2014-01-30 18:13:54
【问题描述】:
public int recursive(int x){
if(x>10){
return x;
}
int y = x + 1;
int r = recursive(y);
System.out.println(y + " Y" + " R" + r + " X " + x);
return r;
}
public static void main(String[] args) {
System.out.println(new a().recursive(1));
}
这是我为简化我无法理解的不同方法而进行的递归,但它基本上具有相同的代码行。我不明白这条线上发生了什么int r = recursive(y);。我不明白return r; 甚至返回什么或它如何主动循环。当我系统打印 R 时,每次迭代总是相同的值让我失望。如果我更改 return r to return 555 代码仍然有效,但只是将 555 返回到来自 main 的调用。
输出
11 Y R11 X 10
10 Y R11 X 9
9 Y R11 X 8
8 Y R11 X 7
7 Y R11 X 6
6 Y R11 X 5
5 Y R11 X 4
4 Y R11 X 3
3 Y R11 X 2
2 Y R11 X 1
11
请 eli5,我看过一些递归视频,但他们没有使用像这样布置的递归,递归调用后返回。 int r = recursive(y);,r这里怎么取值,继续循环,想不通。它说设置r等于recursive(y)的返回值,但是当r的值尚未设置时返回r本身?
我遇到的另一个问题是系统打印也是如何运行的,因为我认为当递归部分运行时,它会立即重新启动该方法,但似乎整个方法正在运行和循环
【问题讨论】:
-
只是好奇。 eli5 是什么?
-
对不起,像我 5 岁一样解释的缩写
-
你能把这个过程写在一张纸上,告诉我们你有什么,你在哪里卡住了吗?
-
我试过画它,但实际上不知道从哪里开始这个 int r = recursive(y);。我以为 r 会是 2>3>4>5...但它始终是最后一个值,即 11
-
用调试器运行一下就明白了。