设置四个变量左边界l,右边界r,上边界u,下边界d。每调用一次递归在二维数组中存一层数据,然后把l加1,r减1,u加1,d减1。lr为递归出口。代码如下:
10年建站经验, 网站建设、网站设计客户的见证与正确选择。成都创新互联公司提供完善的营销型网页建站明细报价表。后期开发更加便捷高效,我们致力于追求更美、更快、更规范。
#include stdio.h
int b[100][100];
void fz(int l,int r,int u,int d,int v,int n)
{
int x,y,i,j,k,m;
if(lr)
for (x=0;xn;x++)
{
for (y=0;yn;y++)
printf("%4d",b[x][y]);
printf("\n");
}
while(l=r)
{
for (i=l;i=r;i++) b[u][i]=v++;
for (k=u+1;kd;k++) b[k][r]=v++;
for (j=r;jl;j--) b[d][j]=v++;
for (m=d;mu;m--) b[m][l]=v++;
return fz(l+1,r-1,u+1,d-1,v,n);
}
}
int main()
{
int n;
scanf("%d",n);
fz(0,n-1,0,n-1,1,n);
return 0;
}
递归,是函数实现的一个很重要的环节,很多程序中都或多或少的使用了递归函数。递归的意思就是函数自己调用自己本身,或者在自己函数调用的下级函数中调用自己。
递归之所以能实现,是因为函数的每个执行过程都在栈中有自己的形参和局部变量的拷贝,这些拷贝和函数的其他执行过程毫不相干。这种机制是当代大多数程序设计语言实现子程序结构的基础,是使得递归成为可能。假定某个调用函数调用了一个被调用函数,再假定被调用函数又反过来调用了调用函数。这第二个调用就被称为调用函数的递归,因为它发生在调用函数的当前执行过程运行完毕之前。而且,因为这个原先的调用函数、现在的被调用函数在栈中较低的位置有它独立的一组参数和自变量,原先的参数和变量将不受影响,所以递归能正常工作。程序遍历执行这些函数的过程就被称为递归下降。
程序员需保证递归函数不会随意改变静态变量和全局变量的值,以避免在递归下降过程中的上层函数出错。程序员还必须确保有一个终止条件来结束递归下降过程,并且返回到顶层。
#includestdio.h
int sumn(int n)
{if(n3)return n;
return n+sumn(n-2);
}
int main()
{int n;
scanf("%d",n);
printf("%d\n",sumn(n));
return 0;
}
#include "stdio.h"
int power(int x,int n)
{
if(n == 0 x == 0)return 0;//无意义
if(n == 0 x != 0)return 1;//幂为0时,返回1,作为结束条件
else return x*power(x,n-1);//递归调用
}
int main()
{
printf("3^4=%d;",power(3,4));
}
#includestdio.h
int
power(int
x,int
n)
{
if(n
==
0)
//任何数的0次方都是1
return
0;
else
if(n
==1)
//如果是1次方
则返回本来的值
return
x;
else
//否则递归循环
return
x*power(x,n-1);
}
main()
{
printf("%d
",power(3,3));
printf("%d
",power(4,2));
getchar();
return
0;
}