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

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

栈是一种支持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,这种一般的解决方法也有三种,一是增大系统栈空间,二是使用非递归的方法,三是减少递归过程中栈空间的使用。

好了,今天的算法我们就讲到这里,有什么疑问可以随时提出。有帮助到的朋友点赞加关注哦,我会持续更新。

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

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

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

  2. 增删改查java代码_程序员:听说你正在为天天写增删改查代码而烦恼

    有相当多的一部分程序员一直都只接触业余应用的功能,天天写业务代码的程序员也被戏称为CURD程序员,CURD就是增(create).改(update).查(read).删(delete)的意思. CUR ...

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

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

  4. java浪漫代码_程序员表白代码,用过的人都找到了对象...

    在情人节送给自己的女朋友玫瑰花, 对于程序员来说是不是太普通了呢? 为什么不试试让情人节变得更特别一些呢? 作为一名程序员, 可以用自己的技术创造出不一样的浪漫! 让你的女朋友眼前一亮,印象深刻. 这 ...

  5. java程序员拜年代码_程序员的新年祝福是什么样的?

    2019就要到来了, 马上要收到各种形形色色的新年祝福, 尽管有一些简单真诚的祝福语, 不过大多是千篇一律的罐头短信. 程序员作为一群高智商群体 在这辞旧迎新的时刻 怎么能一直玩那些老掉牙的梗呢! 你 ...

  6. c#12星座速配代码_程序员12星座性格分析,猜猜哪个星座最适合IT行业?

    原标题:程序员12星座性格分析,猜猜哪个星座最适合IT行业? 身处IT职场,一个有趣的现象是:同为程序员,哪怕是同一种语言,每个程序员写起代码来还是有很多不一样的地方. 至于为何?或许可归结为星座及性 ...

  7. ms查约束具体代码_程序员写代码之前应该做的5件事,看完编程效率瞬间提升

    作者:borisyang,腾讯 WXG 应用开发工程师 作为程序员,刚刚开始学会写代码,常常是接过需求就开始撸代码.有时候发现,写完代码,需求变了.更多时候,觉得写业务代码枯燥无聊,没有技术含量.另外 ...

  8. java写一个简单的浪漫代码_程序员的浪漫弹窗表白,圣诞节给Ta惊喜吧(附源码,简单易学哦)...

    不要以为程序员都是木讷的,浪漫起来也会让很多妹子心动的.而程序员的表白方式也很不一般,通过一堆代码,无限释放浪漫.今天教给大家通过改写脚本语言,利用弹窗可充分自由发挥,用来表白或者恶搞都是不错的选择. ...

  9. 播放失败246106异常代码_程序员必须掌握的异常处理技巧和原则

    Java中的异常机制是指:当程序在运行过程中遇到意外情况时会自动抛出一个Exception对象来通知程序,程序收到这个异常通知后可以采取各种处理措施,这种机制能使程序更加健壮,可读性更高.本文就来讲讲 ...

最新文章

  1. java ftp下载文件源码_java实现ftp文件下载的源代码
  2. Could not open ServletContext resource [/WEB-INF/springmvc-servlet.xml]【解决方案】
  3. Android屏幕适应详解(一)
  4. 使用python处理实验数据-yechen_pro_20171231
  5. Eclipse中各种文件【默认编码格式设置】,防止乱码等问题
  6. 第十八章 8string类insert成员函数的使用
  7. c# list 自定义排序
  8. cf1562E. Rescue Niwen!
  9. 这个点名系统太好用了,快来看看……
  10. Unix——optarg与getopt的用法
  11. L1-043 阅览室 (20 分)(在线模拟题)
  12. 解决filezilla中无法显示中文的文件名
  13. 栈的应用1——超级计算器(中缀与后缀表达式)C语言
  14. JQuery库BootStrap框架完整模板.html
  15. 如何通过蓝牙将PC与Windows Mobile 6的手持机连接,方便调试。
  16. 上海电力大学计算机专业考研好考么,上海电力大学(专业学位)计算机技术考研难吗...
  17. Java程序输出26个大写字母的ASCII对照表
  18. 洛谷P3373线段树2
  19. DiscuzX 数据字典 超详细
  20. 洛谷 P2071 座位安排 (最大流 + 建图)

热门文章

  1. Kali Linux常用服务配置教程安装及配置DHCP服务
  2. vue 解决跨域 调试_Electron-vue解决跨域
  3. zookeeper 分布式过程协同技术详解.pdf_阿里大牛耗时18个月整理这份ZooKeeper分布式详解文档...
  4. python flask实现博客系统_基于Flask的博客网站设计与实现
  5. python占多少空间_Python如何查看变量占用空间大小
  6. 计算机科普知识小动画,4岁嗯哼知识量惊呆杜江!这4部科普启蒙动画,孩子绝对不能错过...
  7. bootstrapr表格父子框_使用Bootstrap Table建立父子表
  8. 解决arXiv上传LaTeXpaper的坑
  9. flask从服务器获取html页面,flask的ajax、获取服务器数据、放到前端页面、如果数据存在显示标签、如果不存在不显示标签...
  10. ACM MM:一种基于情感脑电信号时-频-空特征的3D密集连接网络