前言:
递归的不易在于,我们通常考虑事务的思维从近及远的,而递归恰好相反。在没有思路时拿起草纸,写点自后向前的通式或是花些简图可以有效地帮助我们了解递归。最好跑点代码,因为对于计算机而言,根本就没有递不递归啥的(此处有计算机高傲的眼神)。
特点:
1,函数定义中直接或间接地调用了本函数
2,必定存在可使递归调用终止的条件,否则导致出现无限递归。
3,递归程序通常简洁,但有运行效率低。
4,在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。
递归运行简图:
下面给出两道递归的入门题,这两道都是可以总结出f(n)和f(n-1)甚至f(n-2)的关系的。(给出的代码是函数代码)
习题一: n的阶乘:
给定一个正整数n,求n的阶乘。
分析: 从后向前看可以找到通式f(n)=f(n-1)*n;在设置递归出口条件即可。
代码:
int fn