递归实现回旋数组的小程序
2012-10-13 09:13
183 查看
写个算法:打印如下形式的数字
9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9
9 8 7 7 7 7 7 7 7 7 7 7 7 7 7 8 9
9 8 7 6 6 6 6 6 6 6 6 6 6 6 7 8 9
9 8 7 6 5 5 5 5 5 5 5 5 5 6 7 8 9
9 8 7 6 5 4 4 4 4 4 4 4 5 6 7 8 9
9 8 7 6 5 4 3 3 3 3 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 2 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 2 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 3 3 3 3 4 5 6 7 8 9
9 8 7 6 5 4 4 4 4 4 4 4 5 6 7 8 9
9 8 7 6 5 5 5 5 5 5 5 5 5 6 7 8 9
9 8 7 6 6 6 6 6 6 6 6 6 6 6 7 8 9
9 8 7 7 7 7 7 7 7 7 7 7 7 7 7 8 9
9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9
9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
下面是递归实现:
非递归实现见:/article/3630293.html
9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9
9 8 7 7 7 7 7 7 7 7 7 7 7 7 7 8 9
9 8 7 6 6 6 6 6 6 6 6 6 6 6 7 8 9
9 8 7 6 5 5 5 5 5 5 5 5 5 6 7 8 9
9 8 7 6 5 4 4 4 4 4 4 4 5 6 7 8 9
9 8 7 6 5 4 3 3 3 3 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 2 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 2 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 3 3 3 3 4 5 6 7 8 9
9 8 7 6 5 4 4 4 4 4 4 4 5 6 7 8 9
9 8 7 6 5 5 5 5 5 5 5 5 5 6 7 8 9
9 8 7 6 6 6 6 6 6 6 6 6 6 6 7 8 9
9 8 7 7 7 7 7 7 7 7 7 7 7 7 7 8 9
9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9
9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
下面是递归实现:
public class DiGuiHuiXuan { /** * 本递归算法得思路是:把二维数组看成回行圈,赋值的时候先赋值二维数组的最外围, * 有外而内一圈一圈的递归赋值 *注意根据数组下标从0开始的特点,每一圈的子二维数组的maxRow和minRow * maxColumn 和minColumn有如下数学关系 * maxRow + minRow = array.length -1 * maxColumn + minColumn = array.length-1 * @param array * @param n 回旋数组开始指定的数,或者说是递归调用中子二维数组的最外圈的值 * @param m 记录每一圈的二维子数组的最大行和最大列 */ public static void huiXuan(int[][] array, int n, int m) { //递归出口 if (1 == n) { //取数组的中心位置 int center = array.length >> 1; array[center][center] = 1; return; } //最下面的行 int maxRow = m; //最右边的列 int maxColums = m; //最上面的行 int minRow = array.length - 1 - maxRow; //最左边的列 int minColums = array.length - 1 - maxColums; //(子)二维数组的最上面一行 for (int i = minColums; i <= maxColums; i++) { array[minColums][i] = n; } //(子)二维数组的最右边一列 for (int i = minRow; i <= maxRow; i++) { array[i][maxColums] = n; } //(子)二维数组的最下面一行 for (int i = maxColums; i >= minColums; i--) { array[maxRow][i] = n; } //(子)二维数组的最左边一列 for (int i = minColums; i < maxColums; i++) { array[i][minColums] = n; } //递归调用 huiXuan(array, --n, --m); } //主函数 public static void main(String args[]) { Scanner s = new Scanner(System.in); System.out.println("请输入一个大于0小于10的数字(输入后回车):"); int n = s.nextInt(); int array[][] = new int[2*n-1][2*n-1]; huiXuan(array, n, array.length - 1); print(array); } /** * 打印二维数组 * @param array int[][] */ public static void print(int array[][]) { for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i].length; j++) { System.out.print(array[i][j] + " "); } System.out.println(); } } }
非递归实现见:/article/3630293.html
相关文章推荐
- PHP实现数组递归转义的方法
- 列出数组中取出的数的全部组合(用递归实现)
- 面试题-程序题-Java递归实现遍历文件目录(所有文件夹和子文件)
- 小程序:备考问题&递归实现每天备考时间的分配(含代码)
- 找出数组中的最小值--递归实现
- 将一整数逆序后放入一数组中(要求递归实现)
- python实现的ftp自动上传下载程序(支持目录递归操作)----转
- 归并排序数组实现之递归和非递归方法
- 编译原理:递归向下分析程序建立语法分析树的Java实现(一)
- 斐波那契数组-递归和循环实现
- js实现数组转树结构的递归与非递归实现
- 编写查找一个单链表特定元素的程序。分别使用递归和非递归方法实现,并比较它们的运行时间。
- 【小程序】递归实现控制台输出的文件树形结构
- 从数组中取出n个元素的所有组合(递归实现)
- PHP递归遍历多维数组实现无限分类的方法
- 求一个整数数组的最大元素,用递归方法实现
- java 编写程序实现从控制台接收一个 5 位以上的整数,使用数组来判断该数字 * 是否是回文数。(例如:789987,12344321是回文数)
- 递归实现一些简单程序
- 小小算法程序,斐波那契数列的数组实现