双转向旋转方阵递归设计
#include <stdio.h> int n,a[20][20]={0}; void main() { int h,v,b,p,s,d; printf(" 请选择方阵阶数n:"); scanf("%d",&n); printf(" 请选择转向,顺转1,逆转2:"); scanf("%d",&p); b=1;s=n;d=1; void t(int b,int s,int d); // 递归函数说明 t(b,s,d); if(p==1) // 按要求输出旋转方阵 printf(" %d阶顺转方阵: \n",n); else printf(" %d阶逆转方阵: \n",n); for(h=1;h<=n;h++) { for(v=1;v<=n;v++) if(p==1) printf(" %3d",a[h][v]); else printf(" %3d",a[v][h]); printf("\n"); } return; } void t(int b,int s,int d) // 定义递归函数 { int j,h=b,v=b; if(s==0) return; // s=0,1时为递归出口 if(s==1) { a[b][b]=d;return;} for(j=1;j<s;j++) // 一圈的上行从左至右递增 { a[h][v]=d;v++;d++;} for(j=1;j<s;j++) // 一圈的右列从上至下递增 { a[h][v]=d;h++;d++;} for(j=1;j<s;j++) // 一圈的下行从右至左递增 { a[h][v]=d;v--;d++;} for(j=1;j<s;j++) // 一圈的左行从下至上递增 { a[h][v]=d;h--;d++;} t(b+1,s-2,d); // 调用内圈递归函数 }