一、递归的概念

1.递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂的问题,同时 可以让代码变得简洁。

二、递归调用机制

三、递归可以解决的问题

1.各种数学问题如: 8 皇后问题 , 汉诺塔, 阶乘问题, 迷宫问题, 球和篮子的问题(google 编程大赛)

2.各种算法中也会使用到递归,比如快排,归并排序,二分查找,分治算法等.

3).将用栈解决的问题–>使用递归代码比较简洁

四、递归需要遵守的重要规则

  1. 执行一个方法时,就创建一个新的受保护的独立空间(栈空间)

  2. 方法的局部变量是独立的,不会相互影响, 比如 n 变量

  3. 如果方法中使用的是引用类型变量(比如数组),就会共享该引用类型的数据.

  4. 递归必须向退出递归的条件逼近,否则就是无限递归,出现 StackOverflowError,死递归:)

  5. 当一个方法执行完毕,或者遇到 return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或 者返回时,该方法也就执行完毕

五、使用递归解决迷宫问题

代码实现

package cn.zzw.algorithm.recursion;public class Maze {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 i=0;i<8;i++){map[i][0]=1;map[i][6]=1;}//设置挡板map[3][1]=1;map[3][2]=1;//输出地图System.out.println("地图的情况为");for(int i=0;i<8;i++){for(int j=0;j<7;j++){System.out.print(map[i][j]+" ");}System.out.println();}//使用递归回溯给小球找路setWay(map,1,1);//输出新的地图System.out.println("小球走过,并标识走过的地图的情况");for(int i=0;i<8;i++){for(int j=0;j<7;j++){System.out.print(map[i][j]+" ");}System.out.println();}}/*** map表示地图* i,j表示小球开始的点的坐标* 如果小球能到达map[6][5]位置,说明找到通路* 规定:当map[i][j]为0表示走过;当为1时表示墙;*       2表示通路可以走;3表示该点已经走过,但是走不通*       走迷宫的策略:下--》右--》上--》左,如果该点走不通,再回溯** @param map 表示地图* @param i 表示开始的起点* @param j* @return*/public static boolean setWay(int[][] map,int i,int j){if(map[6][5]==2){//表示通路已经找到return true;}else{//表示当前这个点还没有走过if(map[i][j]==0){map[i][j]=2;//假定该点是可以走通if(setWay(map,i+1,j)){//向下走return true;}else if (setWay(map,i,j+1)){//向右走return true;}else if (setWay(map,i-1,j)){//向上走return true;}else if (setWay(map,i,j-1)){//向左走return true;}else{//说明该点是走不通的,是死路map[i][j]=3;return false;}}else{//表示如果map[i][j]!=0,可能是1,2,3return false;}}}
}

测试结果

"C:\Program Files\Java\jdk1.8.0_181\bin\java.exe" "-javaagent:D:\IntelliJ IDEA\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=4613:D:\IntelliJ IDEA\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_181\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\rt.jar;C:\Users\1\IdeaProjects\algorithm\out\production\algorithm" cn.zzw.algorithm.recursion.Maze
地图的情况为
1 1 1 1 1 1 1
1 0 0 0 0 0 1
1 0 0 0 0 0 1
1 1 1 0 0 0 1
1 0 0 0 0 0 1
1 0 0 0 0 0 1
1 0 0 0 0 0 1
1 1 1 1 1 1 1
小球走过,并标识走过的地图的情况
1 1 1 1 1 1 1
1 2 0 0 0 0 1
1 2 2 2 0 0 1
1 1 1 2 0 0 1
1 0 0 2 0 0 1
1 0 0 2 0 0 1
1 0 0 2 2 2 1
1 1 1 1 1 1 1 Process finished with exit code 0

十一、递归----迷宫问题相关推荐

  1. 【算法】递归|迷宫回溯问题|八皇后问题

    [算法]递归|迷宫回溯问题|八皇后问题   迷宫回溯问题,要用动态的眼光来看待这个递归算法. package com.serein.recursion;/*** @author baichuan* @ ...

  2. 数据结构和算法(十)递归-迷宫游戏

    1. 数据结构和算法(十)递归-迷宫游戏 1.1 迷宫游戏   今天做一个简单的迷宫游戏,用二维数实现地图,让程序自动寻路的小游戏. 1.2 简单的迷宫 简单的迷宫 用二维数实现地图,找路策略:[右- ...

  3. 学习随记三十一——递归实现二叉查找树

    递归实现二叉查找树 什么是二叉查找树:左子树中的元素都比父节点元素小,右子树中的元素都比父节点中的元素大 二叉查找树的基本操作: 1.生成一颗空树 我选择使用递归来完成,如果传入的地址非空就先递归删除 ...

  4. 数据结构与算法 - 递归回溯(迷宫问题)

    递归的概念 简单说就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时可以让代码简介 递归的调用机制 递归能解决什么问题 递归需要遵守的重要规则 下面用代码来实现一个迷 ...

  5. (数据结构与算法)递归及一些经典递归问题

    文章目录 1. 递归的概念 2. 递归的调用机制 3. 递归需要遵守的重要规则 4. 递归 - 迷宫问题 5. 递归-八皇后问题 1. 递归的概念 递归就是方法自己调用自己,每次调用时传入不同的变量. ...

  6. 递归应用场景和调用机制

    原文链接:传送门 递归 迷宫问题(回溯) 概念 简单呐的说: 递归就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时让代码变得简洁. 案例-递归调用机制 打印问题 p ...

  7. 6.python解答蓝桥杯17年A组真题 迷宫

    6.python解答蓝桥杯17年A组真题 迷宫 标题:迷宫(填空题) X星球的一处迷宫游乐场建在某个小山坡上. 它是由10x10相互连通的小房间组成的. 房间的地板上写着一个很大的字母. 我们假设玩家 ...

  8. 数据结构和算法(第六章递归)

    数据结构和算法第六章递归 数据结构和算法第六章递归 文章目录 数据结构和算法第六章递归 前言 一.递归与回溯? 二.递归用于解决的问题 1.打印问题和阶乘问题回顾递归调用机制 2.递归--迷宫问题(小 ...

  9. 20172323 2017-2018-2 《程序设计与数据结构》第九周学习总结

    教材学习内容总结 本周学习第十一章异常和第十二章 第十一章-异常 异常是一个定义非正常情况或错误的对象,由程序或运行时环境抛出,可以根据需要进行相应的捕获和处理. 错误和异常都是对象,代表非正常情况或 ...

最新文章

  1. Python 连接 redis 模块
  2. 我是IT小小鸟 读书笔记
  3. (chap2 简单的Http协议) 请求报文和响应报文
  4. Java一个对象的内存运行流程图
  5. 基于图像切换器(imageSwitcher)的支持动画的图片浏览器
  6. 网络 计算机不显示不出来,网页图片显示不出来怎么办 网络故障解决【详解】...
  7. XEIM 帮助文档【草稿版】
  8. 【ubuntu操作系统入门】Ubuntu常用命令大全一
  9. JBoss中间件漏洞总结
  10. android packages/apps 加入工程,深入安卓Package Manager和Package Installer
  11. 在本地计算机无法启动iis admin 服务.错误:1053,Windows无法在本地计算机上启动SQL Server(SQLEXPRESS)服务。错误1053...
  12. 二叉树的前序序列、中序序列、后序序列、层次序列
  13. 细胞工程-6-原生质体分离核体细胞杂交
  14. 2020-10-24 车机UI的SystemUI修改
  15. BUCK电流检测分析
  16. (理财九)保值账户如何投资理财实现5年内短期目标
  17. Rtools 环境变量设置-windows
  18. oracle rac 11.2.0.4 镜像copy迁移数据到新存储
  19. uni-app 页面组件生命周期
  20. ubuntu 16.04 安装 openCV 3.2 --对该问题的处理CMake Error at cmake/OpenCVModule.cmake:295 (message)

热门文章

  1. vivado调用modelsim
  2. Gemini 3D双目结构光深度相机在Android平台上深度数据噪点非常多的问题
  3. pyhton 中的字符串切片问题
  4. iMeta:德布鲁因图在微生物组研究中的应用(全文翻译,PPT,视频)
  5. 单细胞转录组专题研讨会第二期
  6. 易生信高级转录组分析和数据可视化第9期课程开课啦!!
  7. 查看Linux中硬链的所有文件路径
  8. matlab cam orbit,如何在MATLAB中平滑旋转3D绘图?
  9. Warning message:NAs introduced by coercion
  10. R语言使用fmsb包、gradar包可视化雷达图(radar chart、蜘蛛图spider plot)、ggpubr包可视化点图、GGally包可视化多变量的平行坐标轴图