文章目录
一、递归
程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
递归的使用通常可以简化程序的书写,但同时在使用递归时必须设置可以退出的条件,不然会造成栈溢出,因为递归的调用会不断将方法压入栈,如果没有退出递归的条件,栈肯定会溢出
二、递归简单解决迷宫
- 以下代码模拟了一个9X9的迷宫格,以数字1 代表围墙,数字2 代表已走过,数字3 代表走不通
public static void main(String[] args) {
int[][] map = new int[9][9];
// 创建地图
for (int i = 0; i < 9; i++) {
for (int i1 = 0; i1 < 9; i1++) {
if (i == 0 || i == 8) {
map[i][i1] = 1;
}
if (i1 == 0 || i1 == 8) {
map[i][i1] = 1;
}
}
}
map[3][1] = map[3][2] = map[3][3] = 1;
getWay(map, 1, 1);
// 输出地图
for (int i = 0; i < 9; i++) {
for (int i1 = 0; i1 < 9; i1++) {
System.out.print(map[i][i1] + " ");
}
System.out.println();
}
}
/**
* @param map 地图
* @param x
* @param y
* @return 寻找策略:下 又 上 左
*/
public static boolean getWay(int[][] map, int x, int y) {
if (map[7][7] == 2) {
return true;
} else {
if (map[x][y] == 0) {
map[x][y] = 2;
System.out.println(x + "___" + y);
if (getWay(map, x + 1, y)) {
return true;
} else if (getWay(map, x, y + 1)) {
return true;
} else if (getWay(map, x - 1, y)) {
return true;
} else if (getWay(map, x, y - 1)) {
return true;
} else {
map[x][y] = 3;
return false;
}
} else {
return false;
}
}
}
- 运行结果
总结
加油噢