首页 > 其他分享 >递归

递归

时间:2022-10-09 18:12:42浏览次数:34  
标签:map return 递归 int col row

递归

递归概念

  • 递归就是方法自己去调用自己本身,每次调用时传入的参数不同;递归有助于解决复杂问题,并且简化代码。

递归解决的问题

  • 可以解决各种数学问题,汉诺塔、迷宫、8皇后等;
  • 各种算法的递归,快排、归并排序、二分查找、分治算法等。

递归规则

  • 执行一个方法时,就创建一个新的受保护的独立栈空间;
  • 方法的局部变量时独立的,不会相互影响;
  • 如果方法中使用的时引用类型变量,比如数组,则会共享引用型数据;
  • 递归必须向退出递归条件接近,否则就会无限递归;
  • 一个方法执行完毕后,或者遇到return,就会返回数据,遵守谁调用,就将结果返回给谁。

递归应用-迷宫

上代码

/**
 * 迷宫 -- 递归应用
 * 迷宫map元素说明
 * 1-障碍墙 不可通过
 * 0-可通过且未走过
 * 2-走过且可通过
 * 3-走过且不可通过
 * 1:1 起点
 * row-1:col-2 终点
 */
public class Maze {
    private int[][] map;
    private int row;
    private int col;



    public Maze(int row,int col){
        this.row = row;
        this.col = col;
        this.map = new int[row][col];
        this.initMap();
    }

    /**
     * 初始化迷宫地图
     */
    private void initMap(){
        //迷宫墙壁定义
        for (int i=0;i<col;i++){
            map[0][i]=1;
            map[row-1][i]=1;
        }
        for (int j=0;j<row;j++){
            map[j][0]=1;
            map[j][col-1]=1;
        }
        //迷宫内障碍墙定义
        for (int i=1;i<row-1;i++){
            for (int j=1;j<col-1;j++){
                map[i][j]=Math.random()>0.7?1:0;
            }
        }
        //起点、终点
        map[1][1]=0;
        map[row-1][col-2]=0;
    }

    /**
     * 查看迷宫地图
     */
    public void mazeMap(){
        System.out.println("**************************迷宫地图********************************");
        for (int[] arr : map){
            for (int item : arr){
                System.out.printf("%d\t",item);
            }
            System.out.println();
        }
    }

    /**
     * 是否可以通过
     * @param map
     * @param i
     * @param j
     * @return
     */
    private boolean isRun(int[][] map,int i,int j){
        if (map[row-1][col-2]==2){
            //到达终点
            return true;
        }else {
            if (map[i][j] == 0){
                //未走过该点
                map[i][j]=2;
                if (isRun(map,i+1,j)){
                    return true;
                }else if (isRun(map,i-1,j)){
                    return true;
                }else if (isRun(map,i,j+1)){
                    return true;
                }else if (isRun(map,i,j-1)){
                    return true;
                }else {
                    map[i][j]=3;
                    return false;
                }
            }else {
                return false;
            }
        }
    }

    /**
     * 开始通过迷宫
     */
    public void run(){
        if(isRun(this.map,1,1)){
            System.out.println("****************可以通过***************");
        }else {
            System.out.println("****************不能通过***************");
        }
    }
}

运行结果:2即为通过路线

数据结构相关代码仓库地址:
https://gitee.com/red_leafzsp/structureAlgorithms

标签:map,return,递归,int,col,row
From: https://www.cnblogs.com/hongyeci/p/16772281.html

相关文章

  • Go中的闭包、递归
    一闭包详解闭包的应该都听过,但到底什么是闭包呢?闭包是由函数及其相关引用环境组合而成的实体(即:闭包=函数+引用环境)。“官方”的解释是:所谓“闭包”,指的是一个拥有许......
  • 【Java复健指南03】递归思想
    【递归】递归重要规则1.执行一个方法时,就创建一个新的受保护的独立空间(栈空间)方法的局部变量是独立的,不会相互影响,比如n变量如果方法中使用的是引用类型变量(比......
  • python递归算法
    递归是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就是“自己调自己”,一个使用递归技术的方法将会直接或间接的调用自己。利用递归可以用简单的程序来解决......
  • fibnacci数列递归实现
    fibnacci数列递归实现1.什么是斐波那契(fibnacci)数列?斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21,34,55,89...这个数列从第3项开始,每一项都等于前两项之和。2.递归表达式F(......
  • fibnacci数列递归实现
    1.斐波那契数列(Fibonaccisequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(LeonardodaFibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、......
  • fibnacci数列递归实现
    fibnacci数列递归实现fibnacci数列斐波那契数列(Fibonaccisequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(LeonardoFibonacci)以兔子繁殖为例子而引入,故又称为“兔......
  • fibnacci数列递归实现
    fibnacci数列递归实现网上查询资料说明什么是fibnacci数列?斐波那契数列(Fibonaccisequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(LeonardoFibonacci)以兔子繁殖为......
  • 03 栈与递归 | 数据结构与算法
    1.栈栈的定义:限定在表尾进行插入和删除操作的线性表空栈:不换任何元素的栈栈顶top:允许插入删除的一端栈的操作(连续设计)置空栈make_null_stack()#definemaxn......
  • fibnacci数列递归实现
    fibnacci数列递归实现什么是Fibonacci数列斐波那契数列(Fibonaccisequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(LeonardoFibonacci)以兔子繁殖为例子而引入,故又称......
  • 【Java基础】递归介绍、思想、基本使用、求阶乘及递归遍历目录
    目录​​一、递归介绍​​​​二、递归求阶乘​​​​三、递归遍历目录​​一、递归介绍递归(recursion)的定义:递归是一种解决问题的有效方法,在递归过程中,函数将自身作为子例......