经过搜索后发现csdn上大多递归实现的螺旋数组都有问题。
在反复debug之后我自己终于实现了用递归的方式构建螺旋数组。
递归思想:螺线数组由一层层的正方形框组成
外层与内层的区别就是边长和初始数字不同
而当边长为1 和 2 时是特殊情况作为结束条件
由此就可以写出递归函数如下:
import java.util.Scanner;
public class SpiralArrayRecursion {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("input n");
int n = sc.nextInt();
int[][] nums = new int[n][n];
f(1,n,1,nums);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
System.out.print(nums[i][j] + " " );
}
System.out.println("n");
}
}
public static int[][] f(int startNum,int n,int k,int[][] nums){
//int[][] nums = new int[n][n];
//n = 1或2 时结束递归
if(n == 1){
nums[k - 1][k - 1] = startNum;
return nums;
}else if(n == 2){
nums[k - 1][k - 1] = startNum++;
nums[k - 1][k] = startNum++;
nums[k][k] = startNum++;
nums[k][k - 1] = startNum++;
return nums;
}
//构造外层正方形
int col = n;//右列数及下行数
int r = k - 1;
//上行
for (int i = 0; i < col; i++) {
nums[k - 1][k - 1 + i] = startNum++;
}
//右列
for (int i = 0; i < col - 1; i++) {
nums[k + i][k + col - 2] = startNum++;
}
//下行
for (int i = 0; i < col - 1; i++) {
nums[k + col - 2][col + k - 3 - i] = startNum++;
}
//左列
for (int i = 0; i < col - 2; i++) {
nums[col + k - 3 - i][k - 1] = startNum++;
}
return f(startNum,n - 2,k + 1,nums);
}
}
代码运行结果如下:
偶数:n = 6时
奇数:n = 5时



