递归
函数或者方法自己调用自己,
百度中是这样说的
“一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。”
表面上还是不难理解的,但是如果真正的应用,在检测递归调用的正确性的时候 ,容易把自己绕晕了,就比如这下这个方法吧
public void a(){
//.............
m=a();
n=b();
//.............
}
如果debug进去,还真是把你给绕晕了。
其实理解递归关键在于理解跳出条件,其实跳出条件跟执行过程有一定数据关联关系,代码是其实很好理解当执行到m=A()时,程序重新会进入A()里面,A()里面有跳出条 件会作出判断是否返回,(如果没有跳出条件程序会不断进入递归,直到内存耗尽,或出现异常。)当条件符合时就会返回数据回到上一层递归,在上一层递归中接着执行n=A(), 然后同m=A()一样进行递归;
其实整个问题在于结束条件而不在m和n的值,也就是说,只要有一处递归可以结束,那么所有递归都是可以结束的,问题只是在于递归的次数多少而已。 如果你没有考虑结束条件,如你可能将内部变量作为结束条件,这样是无法结束的,因为内部变量每次执行递归时都是新变量与上层是无关联的。