递归概述与递归能解决的问题和规则

递归 : recursion

递归的概念:

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

最基本的递归算法:

package com.ffyc.recursion;public class SimpleRecursion {//测试方法public static void main(String[] args) {int factorial = factorial(4);System.out.println(factorial);}//使用最简单的递归求解阶乘public static int factorial(int n) {if (n == 1) {return 1;}else{return factorial(n - 1) * n;}}
}

递归能解决的问题:

  1. 各种数学问题: (比如:)

    ①八皇后问题

    ②汉诺塔问题

    ③阶乘问题

    ④迷宫问题

    ⑤球和篮子的问题

    • 以上都是google编程大赛中出现过的题目
  2. 各种算法中也会使用到递归:(比如:)

    ①快速排序

    ②归并排序

    ③二分查找

    ④分治算法

    等等

  3. 用栈解决的问题可以使用递归进行解决(使用递归解决的代码会比较简洁)

  4. 还有树 和 图中的很多问题 :
    ①求最小生成树

    ②求最短路径

    等等

递归需要遵守的重要规则

  1. 执行一个方法时,就会创建一个新的受保护的独立空间(栈空间)
  2. 方法的局部变量是独立的,不会相互之间影响(比如: 我们之前讲阶乘的时候,不同的栈空间中的变量n的值是不同的)
    • 但是如果方法中使用的是引用类型变量(比如数组) ,则多个栈空间中就会共享该数组(引用类型的数据)

      • 因为我们的引用类型变量是存储在堆空间或者方法区中的,多个栈中可以共享一个堆或者方法区中的数据,而基本数据类型的数据是存储在栈空间中的,所以不同的栈中有互不相干的基本数据类型的变量
  3. 递归必须向退出递归的条件逼近, 否则就会出现无限递归的问题,出现StackOverflowError
    • 无限递归简称为:“死龟了”,哈哈
  4. 当一个方法执行完毕之后,或者是遇到return结束之后,就会返回,谁调用这个方法,那么就将结果返回给谁

补充:

  1. 递归的本质: 将原来的问题转化为更小的同一问题

  2. 递归 = 终止条件 + 递归操作

递归概述与递归能解决的问题和规则 [数据结构][Java]相关推荐

  1. 全排列(含递归和非递归的解法)

    全排列在近几年各大网络公司的笔试中出现的比较频繁 首先来看看题目是如何要求的(百度迅雷校招笔试题). 用C++写一个函数, 如 Foo(const char *str), 打印出 str 的全排列, ...

  2. 汉诺塔的改编题(用栈求解,分别递归和非递归)

    限制不能从最左侧的塔直接移动到最右侧,也不能从最右侧直接移动到最左侧,而是必须经过中间,求当塔有N层的时候,打印最优移动过程和最优移动总步数 例如:当塔为两层时,最上层的塔记为1,最下层的塔记为2,则 ...

  3. 转载:二叉树的前中后和层序遍历详细图解(递归和非递归写法)

    二叉树的前中后和层序遍历详细图解(递归和非递归写法) Monster_ii 2018-08-27 17:01:53 50530 收藏 403 分类专栏: 数据结构拾遗 文章标签: 二叉树 前序 中序 ...

  4. 九十五、二叉树的递归和非递归的遍历算法模板

    @Author:Runsen 刷Leetcode,需要知道一定的算法模板,本次先总结下二叉树的递归和非递归的遍历算法模板. 二叉树的四种遍历方式,前中后加上层序遍历.对于二叉树的前中后层序遍历,每种遍 ...

  5. 左神算法:分别用递归和非递归方式实现二叉树先序、中序和后序遍历(Java版)

    本题来自左神<程序员代码面试指南>"分别用递归和非递归方式实现二叉树先序.中序和后序遍历"题目. 题目 用递归和非递归方式,分别按照二叉树先序.中序和后序打印所有的节点 ...

  6. python递归和循环的区别_递归与伪递归区别,Python 实现递归与尾递归

    递归函数在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函 数.(1) 递归就是在过程或函数里调用自身.(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出 ...

  7. 递归函数非递归化_递归神秘化

    递归函数非递归化 by Sachin Malhotra 由Sachin Malhotra 递归神秘化 (Recursion Demystified) In order to understand re ...

  8. 递归 尾递归_递归,递归,递归

    递归 尾递归 by Michael Olorunnisola 通过Michael Olorunnisola 递归,递归,递归 (Recursion, Recursion, Recursion) Bef ...

  9. java 反转二叉树 非递归_【刷算法】翻转二叉树的递归和非递归解法

    题目描述 操作给定的二叉树,将其变翻转为源二叉树的镜像. 输入描述: 1 1 / \ / \ 2 3 ------> 3 2 / \ / \ / \ / \ 4 5 6 7 7 6 5 4 解题 ...

最新文章

  1. 自定义Flex Library的使用
  2. linux命令文件加密软件,Linux系统下如何加密文件,简单实用的文件管理器GnuPG
  3. linux中安装软件,查看、卸载已安装软件方法
  4. 运用事理图谱搞事情:新闻预警、事件监测、文本可视化、出行规划与历时事件流生成
  5. Kube-OVN:基于OVN的开源Kubernetes网络实践
  6. 如何将32 x 32像素图标转换为16 x 16像素值的图标
  7. Dubbo的设计理念原来就藏在这三张图中
  8. android引导用户打开位置权限_想升级 App?先要个权限吧!!!
  9. linux oracle11.2安装 ins-1010,ARCHLINUX下安装oracle11g
  10. 【源码小记】jQueryの事件绑定
  11. oracle trace详解,Oracle autotrace参数详解
  12. 完美二叉树, 完全二叉树和完满二叉树
  13. java设置窗体图标_在java中怎么设置窗体的图标?详细步骤图解
  14. torch.optim.SGD参数详解(除nesterov)
  15. android文件恢复,安卓手机文件丢失了,如何恢复?
  16. mapbox-gl加载带环境贴图白模(视频)
  17. 选择OA,终极“避雷”方法来啦!
  18. Xcode插件所在的目录:~/Library/Application Support/Developer/Shared/Xcode/Plug-ins
  19. 游戏开发41课 unity 目录分析
  20. 学习英语的历史性转折

热门文章

  1. Android Animation动画详解(二): 组合动画特效
  2. AI 收藏夹 Vol.004:元宇宙走偶像路线了,虚拟爱豆出道
  3. 删除2345网页导航
  4. 透过历史迷雾进行深入探究特斯拉线圈是如何工作的?
  5. JavaScript高级程序设计(红宝石书)学习笔记
  6. 脊髓炎起病急 该做好哪些治疗呢?
  7. RK3288 开发板 排插物理引脚对应图以及如何进入android6.0.1内核终端、uboot终端
  8. 怎样做好路演PPT/keynote
  9. GPON Type B保护
  10. 一步一步学RenderMonkey