void square_matrix(intleft,intright,int up,int down,int v,int n) { int x, y, i, j, k, m;
if(left<=right){ for(i =left; i <=right; i ++) array[up][i]= v ++; for(k = up + 1;k < down; k ++) array[k][right]= v ++; for(j =right; j >left; j --) array[down][j]= v ++; for(m = down; m > up; m--) array[m][left]= v ++; square_matrix(left+ 1,right- 1, up + 1, down - 1, v, n); }else for(x = 0; x < n; x ++){ for(y = 0; y < n; y ++) printf("%4d", array[x][y]); printf("/n"); } }
int main(int argc,char* argv[]) { int n;
scanf("%d",&n);
square_matrix(0, n - 1, 0, n - 1, 1, n);
return 0; }
补充(非递归算法):
#include<stdio.h>
int main(int argc,char* argv[]) { int a, b, c, d, i, n, num = 1, array[20][20];
scanf("%d",&n);
/* a, b, c, d分别为上、下、左、右边界,a、b为行号,c、d为列号 */ for(a = 0, b = n - 1, c = 0, d = n - 1; a <= b; a ++, b --, c ++, d --){ for(i = c; i <= d; i ++) array[a][i]= num ++; for(i = a + 1; i < b; i ++) array[i][d]= num ++; for(i = d; i > c; i --) array[b][i]= num ++; for(i = b; i > a; i --) array[i][c]= num ++; }
for(i = 0; i < n; i ++){ for(a = 0; a < n; a ++)printf("%5d", array[i][a]); printf("/n"); }