A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

刚才转论坛看到两个题一个是打印这个
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
第二道题是打印这个:
1  2 3 4
9 10 5
8  6
7


18 个回复

正序浏览
孔令程 来自手机 初级黑马 2014-12-11 00:55:17
18#
递归是一种思想,可以简单理解为自己调用自己。比如说:一个函数被传入的值为6,返回的值为3,则下次就把3传入这个函数,然后再一步一步运行前几步没有完成的操作。这个是我的理解!递归可以应用于找出一个目录下的所有扩展名为xxx的文件!至于你所说的按圈打印,我想用递归可以实现!
回复 使用道具 举报
学习下……
回复 使用道具 举报
学习下……
回复 使用道具 举报
chensc 金牌黑马 2014-12-10 20:30:47
15#
学习学习!
回复 使用道具 举报
第一个是:杨辉三角变形。第二个是:将n个数打印成一个圈?先打印最外圈,然后递归打印直至最里面一圈。有没有大神来实现一下?
回复 使用道具 举报
学到了,谢谢大神
回复 使用道具 举报
学习学习!
回复 使用道具 举报
我写注释的功夫实在是不咋地 ,
  1. public class PrintNumber {

  2.         public static void main(String[] args) {
  3.                 //选定最大数字
  4.                 int max = 7;
  5.                 //数组的长度
  6.                 int size = max * 2 - 1;
  7.                 int arr[][] = new int[size][size];
  8.                 PrintNumber pn = new PrintNumber();
  9.                 pn.f(arr, max);
  10.                 pn.print(arr);
  11.         }

  12.         private void fun(int[][] arr, int x, int y, int n) {
  13.                 if (n == 0)
  14.                         return;
  15.                 /*
  16.                  * 从最中间的最大的数字开始, 每次都计算包括它和它周围一共9个数字
  17.                  */
  18.                 if (arr[x][y] < n + 1) {
  19.                         int i, j;
  20.                         arr[x][y] = n;
  21.                         for (i = x - 1; i <= x + 1; i++)
  22.                                 for (j = y - 1; j <= y + 1; j++)
  23.                                         fun(arr, i, j, n - 1);
  24.                 }
  25.         }

  26.         private void f(int[][] arr, int max) {
  27.                 fun(arr, max - 1, max - 1, max);
  28.         }

  29.         private void print(int[][] arr) {
  30.                 int i, j;
  31.                 for (i = 0; i < arr.length; i++) {
  32.                         for (j = 0; j < arr[i].length; j++) {
  33.                                 System.out.print(arr[i][j] + " ");
  34.                         }
  35.                         System.out.println();
  36.                 }
  37.         }
  38. }
复制代码
回复 使用道具 举报
  1. 闲话少说 , 代码才是干货

  2. public class PrintNumber2 {

  3.         // 9 以内 , 看着比较好看
  4.         private static int num = 9;
  5.        
  6.         public static void main(String[] args) {
  7.                 int[][] arr = new int[num][num];
  8.                 f(arr);
  9.                 print(arr);
  10.         }

  11.         static void fun(int[][] arr, int x, int y, int n, int flag) {
  12.                 if (arr[y][x] == 0)
  13.                         arr[y][x] = n++;
  14.                 else
  15.                         return;
  16.                 //flag 0 从左往右 1 右上到左下 2 从下往上
  17.                 switch (flag) {
  18.                 case 0:
  19.                         if (x < num - 1 && arr[y][x + 1] == 0)
  20.                                 fun(arr, x + 1, y, n, flag);
  21.                         else {
  22.                                 flag = 1;
  23.                                 fun(arr, x - 1, y + 1, n, flag);
  24.                         }
  25.                         break;
  26.                 case 1:
  27.                         if (y < num - 1 && arr[y + 1][x - 1] == 0)

  28.                                 fun(arr, x - 1, y + 1, n, flag);
  29.                         else {
  30.                                 flag = 2;
  31.                                 fun(arr, x, y - 1, n, flag);
  32.                         }
  33.                         break;
  34.                 case 2:
  35.                         if (arr[y - 1][x] == 0)
  36.                                 fun(arr, x, y - 1, n, flag);
  37.                         else {
  38.                                 flag = 0;
  39.                                 fun(arr, x + 1, y, n, flag);
  40.                         }
  41.                         break;
  42.                 }
  43.         }

  44.         static void f(int[][] arr) {
  45.                 fun(arr, 0, 0, 1, 0);
  46.         }

  47.         static void print(int[][] arr) {
  48.                 int i, j;
  49.                 for (i = 0; i < num; i++) {
  50.                         for (j = 0; j < num; j++) {
  51.                                 if (arr[i][j] == 0)
  52.                                         continue;
  53.                                 System.out.print(arr[i][j] + " ");
  54.                                 if (arr[i][j] < 10) {
  55.                                         System.out.print(" ");
  56.                                 }
  57.                         }
  58.                         System.out.println();
  59.                 }
  60.         }
  61. }
复制代码


这个就是按照画圈的顺序计算的 , 还是放二维数组里
回复 使用道具 举报
ok , 明天加注释啊 ,

sanjiao.png (4.22 KB, 下载次数: 7)

sanjiao.png
回复 使用道具 举报
中国好熊猫 发表于 2014-12-2 14:32
public class PrintNumber {
/*
第一个矩形的

来点注释吧。有点看不懂
回复 使用道具 举报
怎么格式这么难看 ..

点评

继续上班, 另一个下班做  发表于 2014-12-2 14:35
回复 使用道具 举报
public class PrintNumber {
/*
第一个矩形的
*/
        public static void main(String[] args) {
                int max = 7;
                int size = max * 2 - 1;
                int arr[][] = new int[size][size];
                PrintNumber pn = new PrintNumber();
                pn.f(arr, max);
                pn.print(arr);
        }

        private void fun(int[][] arr, int x, int y, int n) {
                if (n == 0)
                        return;
                if (arr[x][y] < n + 1) {
                        int i, j;
                        arr[x][y] = n;
                        for (i = x - 1; i <= x + 1; i++)
                                for (j = y - 1; j <= y + 1; j++)
                                        fun(arr, i, j, n - 1);
                }
        }

        private void f(int[][] arr, int max) {
                fun(arr, max - 1, max - 1, max);
        }

        private void print(int[][] arr) {
                int i, j;
                for (i = 0; i < arr.length; i++) {
                        for (j = 0; j < arr[i].length; j++) {
                                System.out.print(arr[i][j] + " ");
                        }
                        System.out.println();
                }
        }
}
回复 使用道具 举报
中国好熊猫 发表于 2014-12-1 22:22
第一个可以定义一个二维数组来 , 第二个写一个嵌套的for就可以了啊 , 不用递归 ...

不是只打印这个,是可以变数的
回复 使用道具 举报
递归   比较难理解、、、、、、、、、、、
回复 使用道具 举报
没看仔细 , 楼主容我想想在 !
回复 使用道具 举报
第一个可以定义一个二维数组来 , 第二个写一个嵌套的for就可以了啊 , 不用递归
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马