一、递归基础知识

1.1 递归的内涵

1、定义 (什么是递归?)

在数学与计算机科学中,递归(Recursion)是指在函数的定义中使用函数自身的方法。实际上,递归,顾名思义,其包含了两个意思:递 和 归,这正是递归思想的精华所在。

2、递归思想的内涵(递归的精髓是什么?)

正如上面所描述的场景,递归就是有去(递去)有回(归来)。“有去”是指:递归问题必须可以分解为若干个规模较小,与原问题形式相同的子问题,这些子问题可以用相同的解题思路来解决;“有回”是指 : 这些问题的演化过程是一个从大到小,由近及远的过程,并且会有一个明确的终点(临界点),一旦到达了这个临界点,就不用再往更小、更远的地方走下去。最后,从这个临界点开始,原路返回到原点,原问题解决。

更直接地说,递归的基本思想就是把规模大的问题转化为规模小的相似的子问题来解决。特别地,在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况,这也正是递归的定义所在。格外重要的是,这个解决问题的函数必须有明确的结束条件,否则就会导致无限递归的情况。

3、用归纳法来理解递归

递归的数学模型其实就是 数学归纳法,这个在高中的数列里面是最常用的了,回忆一下数学归纳法。

1.2 递归的三大要素

第一要素:明确你这个函数想要干什么

对于递归,我觉得很重要的一个事就是,这个函数的功能是什么,他要完成什么样的一件事,而这个,是完全由你自己来定义的。也就是说,我们先不管函数里面的代码什么,而是要先明白,你这个函数是要用来干什么。

第二要素:寻找递归结束条件

所谓递归,就是会在函数内部代码中,调用这个函数本身,所以,我们必须要找出递归的结束条件,不然的话,会一直调用自己,进入无底洞。也就是说,我们需要找出当参数为啥时,递归结束,之后直接把结果返回,请注意,这个时候我们必须能根据这个参数的值,能够直接知道函数的结果是什么。

第三要素:找出函数的等价关系式

第三要素就是,我们要不断缩小参数的范围,缩小之后,我们可以通过一些辅助的变量或者操作,使原函数的结果不变。

二、递归入门题解

对于递归问题,我主要是紧紧围绕着以下几点来解决:

  • 明确函数的功能(利用这个函数来求什么)
  • 根据递归的基本思想(把规模大的问题转化为规模小的相似的子问题来解决)来找出等价关系式
  • 寻址递归结束条件(找边界、临界)

2.1

递归:由浅入深,深入了解递归相关推荐

  1. 规范化的递归转换成非递归

    递归函数被调用时,系统需要一个运行栈.系统的运行栈要保存函数的返回地址,保存调用函数的局部变量,每一层递归调用所需保存的信息构成运行栈的一个工作记录,在没进入下一层递归调用是,系统就会建立一个新的工作 ...

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

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

  3. 算法练习day10——190328(二叉树的先序、 中序、 后序遍历, 包括递归方式和非递归方式、找到一个节点的后继节点、二叉树的序列化和反序列化)

    1.实现二叉树的先序. 中序. 后序遍历, 包括递归方式和非递归方式 1.1 访问节点的顺序 节点访问顺序如下图所示: 访问顺序:1 2 4 4 4 2 5 5 5 2 1 3 6 6 6 3 7 7 ...

  4. 牛客网递归错题:递归、欧几里得求最大公约数的时间复杂度、线性递归与尾递归实例区别

    很久找不到学习的平衡点,似乎有目的性的去解决问题寻求方法获得知识会比直接吸取知识要有趣,更印象深刻,这些都是我爬过的坑,以此铭记在心. 1. 队列在程序调用时必不可少,因此递归离不开队列.× 递归是栈 ...

  5. java 文件 递归_JAVA实现遍历文件夹下的所有文件(递归调用和非递归调用)

    JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...

  6. 递归函数就兔子数C语言,【C语言】求斐波那契(Fibonacci)数列通项(递归法、非递归法)...

    意大利的数学家列昂那多·斐波那契在1202年研究兔子产崽问题时发现了此数列.设一对大兔子每月生一对小兔子,每对新生兔在出生一个月后又下崽,假若兔子都不死亡.问:一对兔子,一年能繁殖成多少对兔子?题中本 ...

  7. 二叉树先中后序递归遍历与非递归遍历、层次遍历

    文章目录 1 先序遍历 1.1 先序遍历递归 1.2 先序遍历非递归 2 中序遍历 2.1 中序遍历递归 2.2 中序遍历非递归 3 后序遍历 3.1 后序遍历递归 3.2 后序遍历非递归 4 层序遍 ...

  8. 递归转化成非递归过程_8086微处理器中的递归和重入过程

    递归转化成非递归过程 As we all know that a procedure is a set of instruction written separately which can be u ...

  9. 递归算法(python),汉诺塔问题,斐波那契数列,一个简单的递归实例,用递归实现阶乘,用递归查看目录及文件

    https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行! 如有转载,请 ...

  10. 排序算法:快速排序算法实现及分析(递归形式和非递归形式)

    快速排序算法介绍 从名字上就可以看出快速排序算法很嚣张,直接以快速命名.确实快速排序 的确很快速,被列为20世纪十大算法之一.程序员难道不应该掌握么.快速排序(Quick Sort)的基本思想是:通过 ...

最新文章

  1. android8.1内核编译,Android8.1.0安卓源码编译
  2. lora终端连接云服务器_腾讯云服务器上安装mysql,并用navicat连接
  3. jvm系列(五):Java GC 分析
  4. putty连接Linux
  5. linux下python脚本print中文显示不正确_在终端上运行python脚本,没有打印或显示-为什么?...
  6. treegrid 如何获取getchanges inserted_如何避开Vue性能优化之路的荆棘?
  7. 说好的人工智能 怎么只看到高科技玩具?
  8. java applet 换行_如何用java applet 画字符串,宽度大于设定值,自动换行
  9. java用selenium库控制chrome
  10. android abrc 9.png,android从sdcard加载.9.png图片
  11. 如何在Linux命令行中替换多个文件中的字符串
  12. jvm gc监控分析常用命令
  13. Hotdog 热狗大战
  14. python生成的词云没有图案_python词云(词云图生成器)
  15. 苹果笔记本突然开机黑屏
  16. qq计算机丢失msvcp100,Win10无法运行QQ提示缺少MSVCR100.dll?解决方案
  17. html 页面北京怎么设置,怎么给html设置背景色
  18. Mac电脑下好用的mac版远程控制远程桌面软件
  19. 锐捷ruijie无线控制器AC登录说明
  20. Android项目必备技术

热门文章

  1. Socket 套接字原理详解
  2. Linux命令 - wget
  3. QT UI界面组件介绍
  4. 前端跨域问题—解决Firefox浏览器显示“已阻止载入混合活动内容”的方法
  5. TEZ和MR简要区别
  6. 如何使用memset函数
  7. 【计算机组成原理】寻址方式
  8. JavaWeb旅游项目登陆功能
  9. Debian11.5 最小化安装后更改主机名、安装桌面、设置默认语言、时区、静态IP、局域网DNS等
  10. 嵌入式开发中的英文词汇log