(begin, begin) int i, j, k; if (size == 0) // 递归的边界条件,如果 size 等于 0 ,则无须填写 return; if (size == 1){ // 递归的边界条件,如果 size 等于 1 data[begin][begin] = number; // 则只须填写 number printData(maxsize); return; }i= begin; j= begin; // 初始化左上角下标 for (k = 0; k< size - 1; k++){ // 填写区域 A ,共填写 size -1 个数 data[i][j] = number; // 在当前位置填写 number number++; i++; // 行下标加 1 } for (k = 0; k< size - 1; k++){ // 填写区域 B ,共填写 size -1 个数 data[i][j] = number; // 在当前位置填写 number number++; j++; // 列下标加 1 } for (k = 0; k< size - 1; k++){ // 填写区域 C ,共填写 size -1 个数 data[i][j] = number; // 在当前位置填写 number number++; i--; // 行下标减 1 } for (k = 0; k< size - 1; k++){ // 填写区域 D ,共填写 size -1 个数 data[i][j] = number; // 在当前位置填写 number number++; j--; // 列下标减 1 } printData(maxsize); Full(number, begin + 1, size - 2); // 递归求解,左上角下标为 begin +1 }