递归简论学习
2015-11-12 00:18
148 查看
1 递归必须满足的四条基本法则
1、基准情形。必须总有某些基准情形,无需递归就可以求出解;
2、不断推进。对于需要通过递归来求解的问题,递归调用的过程必须是朝着基础情形在不断演进;
3、设计法则。假设所有的递归调用都能运行。只有满足这样一条假设前提条件,我们才会不必关系计算机的簿记过程细节,也不必关心实际的调用过程细节,但也应记住簿记的系统开销代价,不应该将其作为简单for循环的替代物;
4、合成效益法则。在求解一个问题的同一实例时,切勿在不同的递归调用中做重复的工作。例如计算斐波那契数列,就不适合用递归来实现;
情形一:不满足法则1、2
2 习题练习
1、编程实现选择问题,即寻找N个元素中的第K个最大者,先实现一个最简陋的,后面学会更好算法来优化它
1、基准情形。必须总有某些基准情形,无需递归就可以求出解;
2、不断推进。对于需要通过递归来求解的问题,递归调用的过程必须是朝着基础情形在不断演进;
3、设计法则。假设所有的递归调用都能运行。只有满足这样一条假设前提条件,我们才会不必关系计算机的簿记过程细节,也不必关心实际的调用过程细节,但也应记住簿记的系统开销代价,不应该将其作为简单for循环的替代物;
4、合成效益法则。在求解一个问题的同一实例时,切勿在不同的递归调用中做重复的工作。例如计算斐波那契数列,就不适合用递归来实现;
情形一:不满足法则1、2
int Find(int N) { if(N == 0) return 0; else return Find(N/3+1)+1; }情形二:不满足法则4
long Fib(int N) { if(N== 1) return 1; else return Fib(N-2) + Fib(N-1); }
2 习题练习
1、编程实现选择问题,即寻找N个元素中的第K个最大者,先实现一个最简陋的,后面学会更好算法来优化它
template<typename T> T FindKMax(T* p,int count,int K) { //先降序排列 for(int i = 0 ; i < count-1;i++) { for(int j = i+1;j<count;j++) { T temp; if(p[i]<p[j]) { temp= p[i]; p[i] = p [j]; p[j] = temp; } } } //取第K个元素 return p[K]; }
相关文章推荐
- Div层的展开与收缩的代码
- Windows系统文件格式与Linux文件格式的比较
- python 学习笔记2
- mysql 语句优化
- Form表单中method为get和post的区别
- 关于mysql数据库以及sql语句的优化技术
- Asp.net MVC中传递ViewData数据不能正确传递的问题
- Android更新UI的两种方法
- 重构代码
- Mac下Idea编译报错:javacTask: 源发行版 1.7 需要目标发行版 1.7
- IOS基本下拉刷新的使用
- 3D数学基础:图形与游戏开发_读书笔记02
- 微信服务号开发-获取用户位置信息
- jQuery幻灯片插件Owl Carousel之itemsDesktop的使用
- view添加手势与tableView冲突问题
- leetcode笔记:Best Time to Buy and Sell Stock II
- ctags常用命令
- Android官方屏幕适配
- windos 2008 IIS7 关于mp3 手机无法播放的问题
- 图形打印