您的位置:首页 > 其它

递归简论学习

2015-11-12 00:18 148 查看
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];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: