递归就是调用函数本身
其实是同名而已,每次调用都会开辟新的内存空间,和A调用B,B调用C,C再调用D过程一样.
D函数执行完毕后,返回到C,C执行D以后的语句,直到C执行完毕,返回到B,B再执行C以后的语句,直到B执行完毕,返回到A,A执行完毕后,整个过程结束.
递归函数也一样,假设递归函数为A,第N个(层)A执行结束后会返回到第N-1个(层)A,N-1个(层)A执行完毕后再返回到第N-2个(层)A,依此类推,直到返回第一个(层)A,整个过程结束.
但如下面这个递归函数,每层A在没结束之前,都会调用下一层A,永无止境:
A()
{
A();
}
所以递归调用必须放在一个条件里面:
A()
{
If()
{
A();
}
Return;
}
这样,直到if中的条件不成立了,最后一层的A执行结束,返回上一层A,然后依次返回.
注意:A返回后,会执行每一层后面的代码,但有些情况.最后一层返回了,就是目的达到了,不需要干别的,直接再返回上一层即可,即每个A()后面直接跟return,如下:
A()
{
If()
{
A();
Return;
}
Return;
}
注意:如果调用递归的语句是最后执行,则不必多加return.