1、递归
函数的递归调用;
fun1()-->fun2()-->fun3()-->fun1() 间接递归
fun1()<-->fun1() 直接递归
2、递归调用的性质特点
(1)、函数的调用存在系统资源的消耗,空间及时间的消耗;
(2)、函数的递归调用往往都比较深,因此会产生大量的系统资源的消耗;
(3)、函数的递归调用,若不注意调用的规模(即深度),很容易造成系统资源不足时崩溃的结果;
(4)、递归调用比较符合数学递归定义,因此递归程序都比较好被证明相关算法的正确性及完备性;
(5)、可以先通过递归算法验证程序,在转换成非递归算法以保证效率和安全;
3、递归调用的模型图
每次都得进行形参压栈,保存现场信息,此时变量名称相同,但是已经是在不同的函数中,具有不同的生命周期;
模型图:
4、递归程序的设计思路
(1)、首先要写出递归的结束条件;
(2)、其次先只想当前的递归程序该怎么操作(不要去想上一次/下一次的递归),并写出有效代码;
(3)、然后在着重考虑与下一次在调用上的递进关系,此时通过参数加以实现;