数据结构和算法-6.递归

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];
        //1表示墙体
        for (int i = 0; i < 7; i++) {
   
            map[0][i] = 1;
            map[7][i] = 1;
        }
        for (int j = 0; j < 8; j++) {
   
            map
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值