-
递归--阶乘
public int factorial(int n) {
if (n == 1) {
return 1;
} else {
return factorial(n - 1) * n;
}
}
-
递归--猴子吃桃
/**
* 猴子吃桃问题
*
* @param day 天数
* @return 第一天桃子数
*/
public int peach(int day) {
if (day == 10) {
return 1;
} else if (day >= 1 && day <= 9) {
return (peach(day + 1) + 1) * 2;
} else {
System.out.println("day在1-10");
return -1;
}
}
-
递归--迷宫问题
package Test0831;
/**
* 递归--迷宫问题
*
* @author caicai
*/
public class MiGong {
public static void main(String[] args) {
// 思路
// 1.先创建迷宫 用二维数据表示 int[][] map = new int [8][7]
// 2.先规定 map 数组的元素值 0表示可以走 1表示障碍物
int[][] map = new int[8][7];
for (int i = 0; i < 7; i++) {
// 将上下两行全部设置为1
map[0][i] = 1;
map[7][i] = 1;
// 将左右两行设置为1
map[i][0] = 1;
map[i][6] = 1;
}
map[3][1] = 1;
map[3][2] = 1;
System.out.println("==========找路前的情况如下============");
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map[i].length; j++) {
System.out.print(map[i][j] + " ");
}
System.out.println();
}
// 调用函数
Way way = new Way();
way.findWay(map, 1, 1);
System.out.println("==========找路的情况如下============");
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map[i].length; j++) {
System.out.print(map[i][j] + " ");
}
System.out.println();
}
}
}
class Way {
/**
* 定义一个方法 如果找到就返回true 没找到就返回false
* 0:表示可以走 但是还没走过 1:表示障碍物 2:表示可以走 3:表示走过 但是走不通
* 走路策略 下右上左
* 当map[6][5] = 2的时候就说明找到了
*
* @param map 表示迷宫
* @param i 表示老鼠的位置 初始位置是 1 1
* @param j 表示老鼠的位置 初始位置是 1 1
* @return 返回有没有找到
*/
public boolean findWay(int[][] map, int i, int j) {
if (map[6][5] == 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;
}
}
}
}