递归

  1. 递归的定义:递归就是不断的调用自己的方法,帮助解决麻烦的代码问题,最后提高代码的简洁性、
  2.  

     递归需要遵守的规则:

     

     

  3. 迷宫回溯问题:

     

     

  4. 迷宫回溯问题的代码实现:
    package 递归;

    public class 迷宫回溯问题 {
    public static void main(String[] args) {
    //先创建一个二维数组模拟迷宫
    int[][] map=new int[8][7];
    //使用1表示墙,上下全部置为1
    for (int i = 0; i <7 ; i++) {
    map[0][i]=1;
    map[7][i]=1;


    }
    //左右全部置为1
    for (int i = 0; i <8 ; i++) {
    map[i][0]=1;
    map[i][6]=1;

    }
    //设置挡板,用1表示
    map[3][1]=1;
    map[3][2]=1;
    System.out.println("输出地图的情况");
    for (int i = 0; i <8 ; i++) {
    for (int j = 0; j <7 ; j++) {
    System.out.print(map[i][j]+"\t");

    }
    System.out.println();

    }

    }
    //使用递归来给小球找路
    /*
    * 1:map表示地图
    * i,j表示从地图的那个位置开始出发
    * 如果小球能到map【6】【5】的位置,说明找到
    * 约定:当map【i】【j】为0时,表示该点没有走,1表示墙,2表示可以走,3表示该点已经走过,但是走不通
    * 当走迷宫时,需要确定一个策略,下》右》上》左,如果该点走不通,在回溯
    *如果找到通路,返回true,否则返回false
    * */
    public static boolean setWay(int[][] map,int i,int j){//通路已经找到
    if (map[i][j]==2){
    return true;

    } else {
    if (map[i][j]==0){//该点还没有走过
    map[i][j]=2;//假设该点可以走通
    if (setWay(map,i+1,j)){//向下走
    return true;
    }else if (setWay(map,i,j+1)){//向右走
    return true;
    }else if (setWay(map,i-1,j)){//向上走
    return true;
    }else if (setWay(map,i,j-1)){//向左走
    return true;
    }else {
    //说明该点走不通,是死路
    map[i][j]=3;
    return false;
    }

    }else {
    //如果map【i】【j】为!0时,可能是1,2,3
    return false;
    }


    }
    }
    }
posted @ 2023-03-24 17:03  为zq  阅读(30)  评论(0)    收藏  举报