递归调用总结
2017-06-02 15:18
176 查看
1.递归算法是一种直接或者间接调用自身的算法。
2.递归过程一般通过函数或子过程来实现,是把问题转化为规模缩小了的同类问题的子问题,在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
3.递归调用的过程当中系统为每一层的返回点,局部量等开辟了栈来存储。
递归过程过多容易造成栈溢出。
递归的要求时用在规模上有所减小;第二是相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输出);第三是在递归调用过程都是有条件的。
例如一个汉诺塔问题:
直接上代码:
Void han(int n,char one,char two,char three)
{
If(n==1)
Printf("%c->%c\n",one,three);
Else
{
han(n-1,one,three,two);
Printf("%c->%c\n",one,three);
han(n-1,two,one,three);
}
}
2.递归过程一般通过函数或子过程来实现,是把问题转化为规模缩小了的同类问题的子问题,在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
3.递归调用的过程当中系统为每一层的返回点,局部量等开辟了栈来存储。
递归过程过多容易造成栈溢出。
递归的要求时用在规模上有所减小;第二是相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输出);第三是在递归调用过程都是有条件的。
例如一个汉诺塔问题:
直接上代码:
Void han(int n,char one,char two,char three)
{
If(n==1)
Printf("%c->%c\n",one,three);
Else
{
han(n-1,one,three,two);
Printf("%c->%c\n",one,three);
han(n-1,two,one,three);
}
}
相关文章推荐
- 递归调用与时间复杂度的学习总结
- leetcode中的递归调用总结
- 算法小白总结(二)------递归调用
- java基础,递归调用的初学总结
- 在.NET中调用Oracle9i存储过程经验总结
- 在.NET中调用Oracle9i存储过程经验总结
- 在.NET中调用Oracle9i存储过程经验总结
- weblogic——远程/近程调用EJB的方法总结
- 在.NET中调用Oracle9i存储过程经验总结
- C++Builder下调用Matlab的COM总结
- 字节对齐和C/C++函数调用方式学习总结(多篇节选)
- Js 调用 WebService心得总结
- 关于java调用window DLL里的函数的总结
- 小问题,对递归重复调用的改进,一起来分享
- Js 调用 WebService心得总结
- Js 调用 WebService心得总结
- [总结]利用Javascript 调用WebService
- 在.NET中调用Oracle9i存储过程经验总结
- 子类调用的一些总结
- Js 调用 WebService心得总结