- class Test
- {
- public static void main(String[] args)
- {
- spiral(5);
- }
- /**
- * 此方法用于描述当前点在arr方阵中的坐标值(x,y),被打印的当前圈的长度len,以及变化的值value
- * */
- private static void spiral(int[][] arr,int value,int len,int x,int y)
- {
- if(len<=0)//这里为递归结束条件,即圈维度小于0时,结束递归
- return;
- for(int j=0;j<len;j++)//横向填充
- {
- arr[x][y]=value;
- y++;
- value++;
- }
- y--;
- value--;
- for(int i=0;i<len;i++)//纵向填充
- {
- arr[x][y]=value;
- x++;
- value++;
- }
- x--;
- y--;
- len--;
-
-
- for(int j=0;j<len;j++)//横向填充
- {
- arr[x][y]=value;
- y--;
- value++;
- }
- y++;
- value--;
- for(int i=0;i<len;i++)//纵向填充
- {
- arr[x][y]=value;
- x--;
- value++;
- }
- x++;
- y++;
- len--;
- spiral(arr,value,len,x,y);//进入下一轮递归
- }
- public static void spiral(int n)
- {
- int[][] arr=new int[n][n];
- spiral(arr,1,arr.length,0,0);
- printArr2(arr);
- }
- public static void printArr2(int[][] arr)
- {
- for(int[] array:arr)
- {
- for(int value:array)
- {
- System.out.print(value+"\t");
- }
- System.out.println();
- System.out.println();
- }
- }
- }
复制代码
|
|