递归简论学习

来源:互联网 发布:广西移动重大故障知乎 编辑:程序博客网 时间:2024/06/05 11:57

1  递归必须满足的四条基本法则

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];}




0 0
原创粉丝点击