当我用2作为参数调用它时,我无法弄清楚这个方法中发生了什么.
public int foo(int i) {
if (i > 0) {
System.out.println(”i: ” + foo(i - 1));
}
return i;
}
Run Code Online (Sandbox Code Playgroud)
这个方法返回两个i.
1)i:0
2)我:1
我试着这样理解.当使用foo(2)调用该方法时,i的值为2且大于零.所以它通过if测试.然后该方法在print方法中回忆起来; foo(2-1)是foo(1).现在i的值为1,再次通过if测试; 并且在打印方法中,foo(1-1)变为foo(0),它不通过if测试,所以它返回i的值,现在为零.这里我不明白的是i的第二个值是1来自哪里.
我请求你的帮助.谢谢.
这里我不明白的是i的第二个值是1来自哪里.
无论方法是否递归,它总是返回i.因此foo(2),即使它在打印时递归,也会始终返回2.
这里的输出消息令人困惑,因为它不打印i.它可以帮助您了解您是否将其更改为:
public int foo(int i) {
if (i > 0) {
int recurse = foo(i - 1);
System.out.println("i: " + i + "; foo(i - 1): " + recurse);
}
return i;
}
Run Code Online (Sandbox Code Playgroud)
请注意,您得到的结果在"逆向"命令,因为它会调用打印的结果foo(1),同时还内 foo(2).
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |