赛程表 (递归调用, 非递归调用)
package site.wanjiahao.gameTable;
public class Main {
// 为了方便调试,直接限定数值大小 需要改变也可以动态改变
public static int[][] recursionGameAry = new int[8][8];
public static int[][] gameAry = new int[8][8];
public static void main(String[] args) {
RecursionGameTable(8);
System.out.println("递归调用:");
for (int[] ints : recursionGameAry) {
for (int num : ints) {
System.out.print(num + "\t");
}
System.out.println();
}
gameTable(8);
System.out.println("非递归调用:");
for (int[] ints : gameAry) {
for (int num : ints) {
System.out.print(num + "\t");
}
System.out.println();
}
}
public static void RecursionGameTable(int n) {
if (n == 1) {
recursionGameAry[0][0] = 1;
} else {
int m = n / 2;
RecursionGameTable(m);
copy(m);
}
}
private static void copy(int m) {
for (int i = 0; i < m; i++) {
for (int squareSize = 0; squareSize < m; squareSize++) {
// 上下增加
recursionGameAry[i + m][squareSize] = recursionGameAry[i][squareSize] + m;
// 对角复制
recursionGameAry[i + m][squareSize + m] = recursionGameAry[i][squareSize];
recursionGameAry[i][squareSize + m] = recursionGameAry[i + m][squareSize];
}
}
}
public static void gameTable(int n) {
for (int i = 0; i < n; i++) {
// 矩阵大小 1 2 4 8 变化 2的n-1次方 由小变大
int squareSize = (int) Math.pow(2, i);
if (squareSize > n) {
break;
} else {
if (squareSize == 1) {
// 矩阵赋初值
gameAry[0][0] = 1;
} else {
// 4
int subSquareSize = squareSize / 2;
for (int l = 0; l < subSquareSize; l++) {
// 3 2
for (int k = squareSize - 1; k >= subSquareSize; k--) {
// 赋值
gameAry[k][l] = gameAry[k - subSquareSize][l] + subSquareSize;
// 上下
gameAry[k][l + subSquareSize] = gameAry[k - subSquareSize][l];
// 左右
gameAry[k - subSquareSize][l + subSquareSize] = gameAry[k][l];
}
}
}
}
}
}
}