递归的定义
若一对象部分地包含它自己,或用它自己给自己定义。则称这个对象是递归的;
若一个过程直接地或间接地调用自己,则称这个过程是递归的过程。
如递归求阶乘:
long Fact(long n)
{
if(n==0) return 1;
else return n*Fact(n-1);
}
n=5
=5*Fact(4);
=5*4*Fact(3);
=5*4*3*Fact(2);
=5*4*3*2*Fact(1);
=5*4*3*2*1;
采用递归算法解决的问题
1.递归定义的数学函数:
阶乘函数
2阶Fibonaci数列
递归问题-----用分治法求解。分治法:对于一个较为复杂的问题,分解成几个相对简单的且解法相同或者类似的子问题来求解。
分治法的三个必备条件:
1:能将一个问题转变成一个新问题,而新问题与原问题解法相同或者类同,不同的仅是处理对象,且这些处理对象是变化有规律的。
2:可以通过上述转化而使问题简化
3:必须有明确的递归出口,或者递归的边界
分治法求解的一般步骤
void p(参数表)
{
if(递归结束条件) 可直接求解步骤;------基本项
else p(较小的参数);------归纳项
}
//如上面求阶乘的函数
2.具有递归特性的数据结构
二叉树
广义表
3.可递归求解的问题
迷宫问题
Hanoi塔问题
递归过程与递归工作栈
递归工作栈-----递归程序运行期间使用的数据存储区