1.递归(Recursion)介绍
- 递归就是自己调用自己,每次调用传入不同的变量。递归有利于解决复杂的问题,同时可以让代码变得简洁
1.1 递归调用机制
public static int factorial(int n) {
if (n == 1) {
return 1;
} else {
return factorial(n - 1) * n;
}
}
1.2 递归能解决的问题
- 各种数学问题:8皇后问题,汉诺塔,阶乘问题,迷宫问题,球和蓝子问题
- 各种算法:快排,归并排序,二分查找,分治算法等
- 用栈解决的问题->递归代码比较简洁
1.3 递归遵守的规则
- 执行一个方法时,就创建一个新的栈空间
- 方法的局部变量是独立的
- 递归必须向退出递归的条件逼近,否则就是无限递归了
- 当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕。
2.迷宫问题
2.1 代码思路
- 使用二维数组模拟迷宫int [][]
- 当 map[i][j] 为 0 表示该点没有走过;当为 1 表示墙;2 表示通路可以走 ;3 表示该点已经走过,但是走不通
- 在走迷宫时,需要确定一个策略(方法) 下->右->上->左 , 一步一步向前试探,如果该点走不通,再回溯
2.2 代码实现
package ch6;
public class MiGong {
public static void main(String[] args) {
int[][] map = new int[8][7];
for (int i = 0; i < 7; i++) {
map[0][i] = 1;
map[7][i] = 1;
}
for (int j = 0; j < 8; j++) {
map