递归-数字旋转方阵问题

问题描述:

输出下图所示N×N(N≥1)的数字旋转方阵。要求:采用递归法实现。
《递归-数字旋转方阵问题》
提示:注意观察A、B、C、D四个区域。

核心思想:

先用数组a[i][j]存储数字num(从1至N2),然后打印。
递归函数作用:
n=0:结束递归
n=1:存入最后一个数字(N2);
n>1:分别按粉蓝红黄四个方向,用四个for循环将num存于第i行第j列即二维数组a[i][j]中。

代码如下:

#include<stdio.h> 
int a[11][11],i,j,num,size;
int xuanzhuan(int n)
{
	if(n==0)return 0;
	if(n==1)
	{
		a[i][j]=num++;
		return 0;
	}		
	for(int k=1;k<n;k++,i++)//粉色方向 
		a[i][j]=num++;
	for(int k=1;k<n;k++,j++)//蓝色方向 
		a[i][j]=num++;
	for(int k=1;k<n;k++,i--)//红色方向 
		a[i][j]=num++;
	for(int k=1;k<n;k++,j--)//黄色方向 
		a[i][j]=num++;
	i++;		 //注意用i++和j++来调整下一次递归时的起点 
	j++;	 	 //第一圈的起点为图中的1位置,第二圈的起点为图中21位置,第三次在33 
	xuanzhuan(n-2);			//下次循环时边长-2 
}
int main()
{
	i=j=1;
	num=1;
	printf("请输入旋转数组的边长(1到10之间):\n");
	scanf("%d",&size);
	xuanzhuan(size);
	for(int i=1;i<=size;i++)//打印存储好的数组 
	{
		for(int j=1;j<=size;j++)
			printf("%3d ",a[i][j]);
		printf("\n");
	}
}

运行结果示例:

《递归-数字旋转方阵问题》

    原文作者:拉丁方阵问题
    原文地址: https://blog.csdn.net/Nothing_but_Fight/article/details/84111096
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞