1.什么是递归?
自己调用自己,每次传入的方法参数不同。
2.需求:
终止条件,和递归规律
代码:
package com;
public class Mul {
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;
map[i][0]=1;
map[i][6]=1;
}
//设置挡板
map[3][1]=1;
map[3][2]=1;
map[1][2]=1;
map[4][4]=1;
map[4][5]=1;
//打印地图
for(int []a:map)
{
for(int data:a)
{
System.out.print(data+" ");
}
System.out.println();
}
System.out.println("=======================");
//使用递归找路:
findWay(map,1,1);
//打印地图
for(int []a:map)
{
for(int data:a)
{
System.out.print(data+" ");
}
System.out.println();
}
}
//使用递归回溯来给小球找路
//1.先传给地图,告诉他从哪开始寻找
//如果找到通路,返回true,否则false
//约定:如果找到map[6][5];
//若map[i][j]为0时,表示还没走过;1表示墙;2表示通路;3走过了但走不通
//走之前确定一个策略:下右上左
public static boolean findWay(int [][]map,int i,int j){
if(map[i][j]==2)
return true;
else{
if(map[i][j]==0)
{
//按策略走
map[i][j]=2; //假定能走通
//向下走
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 true;
}else{
map[i][j]=3;
return false;
}
}else{
return false;
}
}
}
}
思考:
如何走出最短路径?
我们在这里走的是自己规定的策略,所以走的路线和自己最初规定的策略有关。