递归示例
下面列举一个很简单的递归例子
public class ReturnT {
public static void main(String[] args) {
int a = f(3);
System.out.println(a);
}
private static int f(int value) {
if (value == 1) {
return 1;
} else {
int ret=f(value - 1) + 1;
return ret;
}
}
}
之前有看到这么个调用顺序,还是不大明白,后续自己跑了下
main
→ f(3) // f(3) 等于 f(2) + 1
→ f(2) + 1 // 递进
→ f(1) + 1 // 递进
→ f(1) // 遇到临界值,即 value == 1
← 1 // 返回
← 1 + 1 // 回归
← 2 + 1 // 回归
← 3 // f(3)返回3
当 # f()方法块传入value=3时 上面整个代码调用我们可以近似的看做
public class ReturnT {
public static void main(String[] args) {
int a = f1(3);
System.out.println(a);
}
private static int f1(int value) {
int ret = f2(2) + 1;
return ret;
}
private static int f2(int value) {
int ret = f3(1) + 1;
return ret;
}
private static int f3(int value) {
return 1;
}
}
第一步:
也就是说f2方法块中
int ret = f3(1) + 1;
其中f3(1) 接收到的是 private static int f3(int value) 方法块中return的1.
此时f2方法中return出去的 ret=1+1=2;
第二步:
也就是说f1方法块中
int ret = f2(2) + 1;
其中f2(2) 接收到的是 private static int f2(int value)方法块中return的ret.
此时 f1方法中return出去的 ret=第一步return出来的2+1=3;
第三步:
main方法块中
int a = f1(3);
f1(3)接收到第二步return出来的ret 赋值给a
所以 打印a=3;