递归注意事项:
思路:
代码:
public class Recursion_maze { public static void main(String[] args) { //创建好迷宫地图 //0--表示未走过的地方 1--表示墙 2---表示通路 3----表示死路 int[][] maze=new int[8][7]; for (int i = 0; i <7 ; i++) { maze[0][i]=1; maze[7][i]=1; } for (int i = 0; i <7 ; i++) { maze[i][0]=1; maze[i][6]=1; } maze[3][1]=1; maze[3][2]=1; maze[4][3]=1; maze[4][4]=1; //检查是否创建正确 for (int[] a: maze) { System.out.println(Arrays.toString(a)); } path(maze,1,1); System.out.println("***************************"); for (int[] a: maze) { System.out.println(Arrays.toString(a)); } } public static boolean path(int[][] maze,int i,int j) { //递归终止条件,避免死循环递归 if(maze[i][j]==2) { return true; } else { //每一个点:下 右 上 左 if(maze[i][j]==0) { maze[i][j]=2; if(path(maze,i+1,j)) { return true; } else if(path(maze,i,j+1)) { return true; } else if(path(maze,i-1,j)) { return true; } else if(path(maze,i,j-1)) { return true; } else { maze[i][j]=3; return false; } } else { return false; } } } }
心得:
递归算是自己学习数据结构中第一个遇见的难理解的问题了。无限套娃,比较复杂,利用栈的思维来理解每一次的递归调用的方法进栈,出站。多动动笔,画画图来理解。后续有感悟继续更新...