递归

自己调用自己

迷宫问题实例

思路

  1. 先创建迷宫,用二维数组表示,int[] [] map = new int[8] [7];

  2. 规定map数组中的元素值,0表示能走,1表示障碍物

  3. 设置障碍物

  4. 写递归方法,参数为map数组地图和初始位置(i,j)

  • 递归方法

    1. 外层判断,是否找到终点,是就返回true

    2. 不是的话,判断当前位置是否通路,是就标记走过

    3. 判断下一个位置,递归,重复所有步骤。

 

public class Test { 
public static void main(String[] args) {
       //定义一个迷宫大小的二维数组
       int[][] map = new int[8][7];
       //设置障碍物1,第一行最后一行,行为固定值,列为变量,设置循环列变量
       for (int i = 0; i < 7; i++) {
           map[0][i] = 1;
           map[7][i] = 1;
      }
       //障碍物,第一列最后一列,列为固定值,行为变量,设置循环行变量
       for (int i = 0; i < 8; i++) {
           map[i][0] = 1;
           map[i][6] = 1;
      }
       //单独的障碍物
       map[3][1] = 1;
       map[3][2] = 1;

       T t = new T();
       t.findWay(map,1,1);

       for (int i = 0; i < map.length; i++) {
           for (int j = 0; j < map[i].length; j++) {
               System.out.print(map[i][j]+" ");
          }
           System.out.println();
      }

  }
}
//递归所在的类。写递归方法
class T {
   //找迷宫只有两种结果,所以返回值选择布尔类型
   //参数有,迷宫的二维数组,当前的位置i和j
   public boolean findWay(int[][] map , int i , int j) {
       if(map[6][5] == 2){
           //这是一个返回值为布尔的方法
           //(6,5)是终点,如果把终点设置为2了,代表已经到终点了。退出循环,返回true
           return true;
      }else{
           if(map[i][j] == 0){
               //判断当前位置,是否能走,可以走就置为2,然后去下一个位置去判断
               map[i][j] = 2;
               //判断下一个位置,优先顺序为下右上左,不存在下一步就置为3.死路
               if(findWay(map,i+1, j)){
                   return true;
              }else if(findWay(map, i, j+1)){
                   return true;
              }else if(findWay(map, i-1, j)){
                   return true;
              }else if(findWay(map, i, j-1)){
                   return