这个方法里面发生了什么?

Zip*_*Zip 2 java recursion

当我用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来自哪里.

我请求你的帮助.谢谢.

Jon*_*eet 8

这里我不明白的是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).