递归真的挺给力,我感觉更好理解点
- /*
- 目的:在控制台输出螺旋方阵?
- 思路:用递归把螺旋方阵分成 一圈 + 中间
- 用规模递减的方法初始化数组。
- 想象一个正方形,外圈是边长为x的加号,内圈有一个边长为x-2的小正方形
- + + + + +
- + * * * +
- + * * * +
- + * * * +
- + + + + +
- 先在最外圈逐个初始化二维数组,然后再把外圈放在一边,把靠着外圈的一圈当做外圈继续初始化,用规模递减的方法直到最中间
- */
- import java.util.Scanner;
- class ForTest12
- {
- static int x = 0;
- public static void main (String[] args)
- {
- Scanner sc = new Scanner(System.in);
- System.out.print("输入数组的边长:");
- int x = sc.nextInt(); //确定螺旋方阵的边长
- int [][] arr = tianJiaA(0,x);//调用方法把最开始的位置和边长传过去,让方法创建一个二维数组并返回。
-
- for (int i=0; i<x; i++)//遍历螺旋方阵
- {
- for (int j=0; j<x; j++)
- {
- System.out.print(arr[i][j]+"\t");
- }
- System.out.println();
- }
- }
- static int[][] tianJiaA(int a,int i)
- {
- int j = i;
- int[][] arr = new int[i][j];//创建二维数组,并把这个数组传给下边的初始化方法
- tianJia(a, arr, i);//a 是 数据的起始位置([0][0]、[1][1]这些),i是数组的长度
- return arr;
- }
- //初始化数组的方法
- static void tianJia(int a, int[][] arr, int i)
- {// a--数组起始位置0([0][0]开始), i--数组长度
-
-
- int j = i;//因为是 方阵 所以i==j
- for (int m=a; m<j; m++) //从左边到右尽头
- {
- arr[a][m] = ++x;
- }
- for (int n=a+1; n<i; n++) //从右边尽头到右下尽头
- {
- arr[n][j-1] = ++x;
- }
- for (int o=j-2; o>=a; o--) //从右下尽头到左下尽头
- {
- arr[i-1][o] = ++x;
- }
- for (int p=i-2; p>=a+1; p--)//从左下尽头到左边
- {
- arr[p][a] = ++x;
- }
- //至此,初始化完最外圈的数组值
- if((a+1)<i-2)//递归,直到把数组中的所有值初始化完毕
- {
- tianJia(a+1, arr, i-1);
- }else if((a+1)==i-2){
- arr[a+1][a+1] = ++x;
- }else
- return;
-
- }
- }
复制代码 |