邹市明肌肉:C语言递归的解说

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 09:07:43
http://ghbsje.blog.163.com/blog/static/66330212006112154232855/ 

递归是一种比较高级的程序设计,要求程序员有较高的思维方法,清楚的逻辑推理能力;

递归定义:函数或者过程直接或者间接地调用自身;

写递归首先考虑: 1、递归出口;(往往是情况最简单的结束条件,相当于人的理想)

                 2、有条件地降阶;(把复杂的问题向着出口去逼)

例如:从前有座山,山里有个庙,庙里有个老和尚对小和尚讲,从前有座山,山里有个庙,庙里有个老和尚对小

和尚讲......

注意:递归形象是说就是:(同理,相同的方法求解)

如1:n!

int fac(int n)

{

if(n==1)

 return 1;//递归出口

else return fac(n-1)*n;//有条件地阶降

}

如2: 求N个数中的最大数

#define n 8//宏定义

int a[n];//全局变量

int max(int n)//个数递 归

{

if(n==1)

 return a[n-1];//递归出口,只有一个数

else  if(max(n-1)>a[n-1])

     return a[n-1];

else return  max(n-1);

}

如3:折半查找

常见查找方法1:int search(int a[],int size,int x)

{

for(int i=0;i

if(a[i]==x)

 return i+1;

else continue;

return 0;

}

折半查找2:

int halfsearch1(int a[],int size,int x)

{ int l=0,r=size-1,m;//有头有尾才能折半,l,r决定了一个区间

while(l<=r)//相等时区间长度为1,还应该折半一次

{ m=(l+r)/2;//折半

  if(a[m]==x) 

  return m+1;//查找结束 ,成功返回下标加1

 else if(a[m]>x)//查找的数在小的那边,改变大指针r

         r=m-1;

else l=m+1;

}

return 0;

}

}

折半查找3递 归:

int halfsearch2(int l,int r,int x)

{

if(l>r) return 0;

else

{  int m=(l+r)/2;

    if(a[m]==x) return m+1;

else if(a[m]>x)  return halfsearch2(l,m-1,x);

else return halfsearch2(m+1,r,x);

}

}