1.什么是递归
说白了,就是在方法中调用该方法;因为要不断调用自身,所以需要设置一个退出递归调用的终止条件,每次调用都要判断本次调用是否满足终止条件,如果满足,则逐层退出递归。
2.例子
class Test {
public int add(int a){
if(a == 1)
return 1;
else
return add(a-1)+a;
}
public static void main(String[] args) {
Test test = new Test();
System.out.println(test.add(5));
}
}
上述示例中,为了计算5的阶乘,add方法中又调用了add方法。但每轮都要判断是否等于1。最终输出15。
进栈出栈流程如下:
3.思考
当递归进行到最底层,即满足结束条件时,返回某个值;处于倒数第二层的式子收到最底层的返回值,就可以进行运算,并继续执行代码,得到结果并返回倒数第三层,依此类推,最终得到顶层的结果。
由此可见,递归天然具有回溯的性质,递归本质是不断利用栈保存未得到结果的式子,直至最底层结果得到,再逐层回溯,得到最终结果。