private int recursion(int i) {
if (i == 1) {
return 1;
}
return i * recursion(i-1);
}
初次接触递归,始终无法理解,后来通过debug代码的执行流程,终于对递归有了一些理解,这里记录一下:
假设传入参数4,那么第一次调用后
4*recursion(3) 注意此时recursion方法并没有返回值,而是继续调用
3*recursion(2)
2*recursion(1)
直到现在,所有的recursion方法都没有返回值,所以,都在等待一个具体的返回值,好了,终于到了最里层
return 1
此时,开始返回了,2*recursion(1)方法有了具体的返回值,变成了2*1,并返回2
3*recursion(2)也有了具体的返回值,变成了3*2,并返回6
4*recursion(3)也有了具体的返回值,变成了4*6,并返回24
是不是思路清晰一些了,不是在调用的过程中计算的,而是在返回的途中进行的计算,这个例子是返回时进行的运算,还有一些是在调用过程中进行的运算,返回了就不再运算了,有些类似循环
刚接触递归,有理解不到位的欢迎大家指正