邹市明肌肉:C语言递归的解说
来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 09:07:43
递归是一种比较高级的程序设计,要求程序员有较高的思维方法,清楚的逻辑推理能力;
递归定义:函数或者过程直接或者间接地调用自身;
写递归首先考虑: 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); } }