1. 程式人生 > >遞迴-數字旋轉方陣問題

遞迴-數字旋轉方陣問題

問題描述:

輸出下圖所示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");
	}
}

執行結果示例:

在這裡插入圖片描述