在此之前,我们介绍了动态规划、深度优先搜索等基础算法,但是,有部分好友评论说,难度太难了,我们知道动态规划的自顶向下跟深度优先搜索一般都用递归实现,今天我们就先来讲讲算法与数据结构中,基础中的基础递归。讲递归之前,我们先来了解下栈。

栈是一种基础的数据结构,每次操作的都是栈顶的数据。我们称栈顶的方向为上,栈底的方向为下,只有上面的元素已经出栈了,下面元素才能出栈,我们称之为先进后出。好比这个图中健身器材,这实际上就是一个栈,最小最上面的那块铁最后安装进去,却最先被取出来,最大的那个铁圈,最早安装进去,最晚取出来。(找了好久才找到一个现实生活中常见又大众的例子,作为一个程序员,生活真的是比较单调)

栈是一种支持Push跟Pop两种数据结构,他的基本操作如下图所示,每次push操作,实际上都是往栈的上方插入一个元素,Pop操作,则是把栈最上方的元素弹出来。

那么这个栈跟我们要讲的递归到底是什么关系呢?我们先看一看这个问题,求一个数的阶乘,一个正整数的阶乘是1到它本身所有正整数的乘积,我们用递归的方式来实现这个功能。

这个代码在操作系统里面是怎么执行的呢,操作系统本身就有一个运行时候的栈。我们假设求5的阶乘,操作系统执行到第5行,发现这是一个递归,就会把它加到系统栈里面,并且记录下我在执行fact方法,x等于5,执行到第5行,然后开始计算4,执行到第5行,发现是个递归,又把他记录到系统栈里面,记录下,正在执行fact方法,x等于4,计算到第5行。。。直到执行到x等于1,然后退出,系统开始退栈,回到刚才X等于2的时候,从第5行开始执行,然后执行第6行,接着退出,执行x=3的时候。。。最后,到了栈底x=5,计算完之后栈没有元素了,整个方法执行完毕!

我们常常说暴栈,也就是Stack Overflow,说的就是系统栈溢出,造成这种问题的一般原因都是因为递归没有退出条件!所以操作系统不停递归,类似与死循环。上述例子中,当x等于的时候就退出,就是退出条件。另外一种可能,是本身数据量就非常大,也有可能会造成Stack Overflow,这种一般的解决方法也有三种,一是增大系统栈空间,二是使用非递归的方法,三是减少递归过程中栈空间的使用。

ssm插入数据时候栈溢出_程序员算法与数据结构基础中的基础,栈与递归相关推荐

  1. 先来先服务算法代码_程序员算法与数据结构基础中的基础,栈与递归

    在此之前,我们介绍了动态规划.深度优先搜索等基础算法,但是,有部分好友评论说,难度太难了,我们知道动态规划的自顶向下跟深度优先搜索一般都用递归实现,今天我们就先来讲讲算法与数据结构中,基础中的基础递归 ...

  2. ssm插入数据时候栈溢出_大话数据结构笔记(4)

    第四章 栈与队列 4.2 栈的定义 4.2.1 栈的定义 栈是限定仅在表尾进行插入和删除操作的线性表,栈的特点是先进去的后出来,后进去的先出来,这种结构称之为后进先出(Last in Frist ou ...

  3. 静态方法与非静态方法的区别_程序员必看之ThinkPHP5中model与Db的区别

    在ThinkPHP5的使用过程中,很多使用者刚接触到数据库操作时,不能很好调用相关的方法进行数据库的交互.下面就分享一下ThinkPHP5中Db与模型的区别 关于db与model的选择 使用DB方式是 ...

  4. png文件合并_程序员学习之在Python中使用PDF:阅读、旋转、合并和拆分

    私信我或关注微信号:猿来如此呀,回复:学习,获取免费学习资源包. PDF 文档格式 今天,可移植文档格式(PDF)属于最常用的数据格式. 1990年,Adobe定义了PDF文档格式. PDF格式背后的 ...

  5. 基本概念_程序员基本功——链表的基本概念

    [程序员必须掌握数据结构: 数据结构中必讲链表: 所以,程序员必须掌握链表] 链表是数据元素的线性集合(Linear Collection),物理存储不连续.那么,这种设计的优点是什么?缺点又是什么? ...

  6. 深圳大数据培训:好程序员大数据学习路线之hive 存储格式

    深圳大数据培训:好程序员大数据学习路线之hive 存储格式 好程序员大数据学习路线之hive存储格式,hive的存储格式通常是三种:textfile . sequencefile . rcfile . ...

  7. css点击a标签显示下划线_好程序员HTML5培训教程-html和css基础知识

    好程序员HTML5培训教程-html和css基础知识,Html是超文本标记语言(英语全称:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言. Css ...

  8. java中的model_Java程序员必看之springmvc中的Model对象在重定向中的数据

    原标题:Java程序员必看之springmvc中的Model对象在重定向中的数据 在springmvc框架中,一个handler方法中的参数可以内置接收Model类型的对象,主要用于存储数据之用,主要 ...

  9. unix入门经典_程序员大神们的经典编程语录

    作为程序员的你,下面这些程序员经典语录请您认真来读一读,也许此时此刻会有不一样的心得体会与收获. "大多数优秀的程序员从事编程工作,不是因为期望获得报酬或得到公众的称赞,而是因为编程是件有趣 ...

最新文章

  1. php 對象轉換成數組,PHP錯誤:陣列對象轉換成關聯數組
  2. 判断两个多边形相交的面积_聊聊3D模型组件—顶点,边,多边形
  3. 对账 java 龙果支付,龙果支付开源项目对账接口说明
  4. Linux中的通配符
  5. yum与rpm的使用
  6. dedecms--需要注意的细节
  7. js设置控件的隐藏与显示的两种方法
  8. Flash Builder4安装SVN插件
  9. Oracle中国区大裁员:昔日辉煌不再,退出中国市场?
  10. php 如何拉取百度统计,如何添加百度统计工具?-MetInfo帮助中心
  11. 又一程序员猝死...
  12. 盘点超好用的 Mac 键盘快捷键
  13. pcb 受潮_硬盘SATA接口断裂及PCB板受潮_希捷 Barracuda 3TB 7200转 64MB_固态硬盘评测-中关村在线...
  14. 图说slam(一):amcl定位算法主要流程概念图解
  15. esrally 如何进行简单的自定义性能测试?
  16. MATLAB_LSB_隐藏水印和提取,附代码
  17. c语言case什么,switch
  18. Linux 如何重启网络、禁用网卡
  19. 论文学习|基于少镜头学习的毛果杨群体叶片性状分析
  20. adidas最软的鞋_哪种鞋子最舒服、最软?

热门文章

  1. 外卖这个筐,阿里美团是做“帮主”还是做“保姆”?
  2. linux数据块的大小不一样,HDFS块大小默认为什么是64MB(或者是128MB)
  3. salt return mysql_mysql中储存salt返回结果
  4. gettype拿不到值_被玩家强行改位置的5个英雄,他上单无解,杀吕布灭铠爹,这都拿去辅助?...
  5. 发布地图服务属性表_Web3D地图来了!腾讯位置服务正式版发布!
  6. java通过maven构建项目实现日志生成模拟(三)通过logback 打印日志
  7. mysql查询当天最新的一张表_mysql 查询当天、本周,本月,上一个月的数据
  8. Python中必须知道的知识点:上下文管理器
  9. python学习-之汉诺塔实现
  10. ubuntu禁用锁屏