黑马程序员技术交流社区
标题:
分享:递归调用输出螺旋数
[打印本页]
作者:
xuecmg
时间:
2016-2-24 17:04
标题:
分享:递归调用输出螺旋数
本帖最后由 xuecmg 于 2016-2-24 17:14 编辑
/*
* 写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印:
*
* 1 2 3 4
*12 13 14 5
*11 16 15 6
*10 9 8 7
**/
public class Exam6 {
public static void main(String[] args) {
int[][] arr = new int[6][6]; //创建n维的二维数组
int num = 1; //设置螺旋数字初始值
int layer = 0; //设置开始螺旋的层数,0代表第外层
diguiluoxuan(arr, num, layer); //调用方法,生成以num为初始值,从第layer层开始的螺旋数字
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
System.out.print(arr[i][j] + "\t");
}
System.out.println();
}
}
public static void diguiluoxuan(int[][] arr, int num, int layer) {
for (int i = layer; i <= arr.length - 1 - layer; i++) { //生成当前层的上面
arr[layer][i] = num++;
}
for (int i = layer+1; i <= arr.length - 1 - layer; i++) { //生成当前层的右面
arr[i][arr.length - 1 - layer] = num++;
}
for (int i = arr.length -2 - layer; i >= layer; i--) { //生成当前层的下面
arr[arr.length - 1 - layer][i] = num++;
}
for (int i = arr.length -2 - layer; i >= layer+1; i--) { //生成当前层的左面
arr[i][layer] = num++;
}
if ((arr.length - 1)/2 - layer <= 0) { //停止条件。
return;
}
diguiluoxuan(arr, num, ++layer); //递归调用,计算下一层
}
}
复制代码
QQ图片20160224170230.png
(4.17 KB, 下载次数: 10)
下载附件
2016-2-24 17:03 上传
作者:
斯麦尔端
时间:
2016-2-24 20:32
谢谢,学习了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2