先来先服务算法代码_程序员算法与数据结构基础中的基础,栈与递归
在此之前,我们介绍了动态规划、深度优先搜索等基础算法,但是,有部分好友评论说,难度太难了,我们知道动态规划的自顶向下跟深度优先搜索一般都用递归实现,今天我们就先来讲讲算法与数据结构中,基础中的基础递归。讲递归之前,我们先来了解下栈。
栈是一种基础的数据结构,每次操作的都是栈顶的数据。我们称栈顶的方向为上,栈底的方向为下,只有上面的元素已经出栈了,下面元素才能出栈,我们称之为先进后出。好比这个图中健身器材,这实际上就是一个栈,最小最上面的那块铁最后安装进去,却最先被取出来,最大的那个铁圈,最早安装进去,最晚取出来。(找了好久才找到一个现实生活中常见又大众的例子,作为一个程序员,生活真的是比较单调)
栈是一种支持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插入数据时候栈溢出_程序员算法与数据结构基础中的基础,栈与递归
在此之前,我们介绍了动态规划.深度优先搜索等基础算法,但是,有部分好友评论说,难度太难了,我们知道动态规划的自顶向下跟深度优先搜索一般都用递归实现,今天我们就先来讲讲算法与数据结构中,基础中的基础递归 ...
- 增删改查java代码_程序员:听说你正在为天天写增删改查代码而烦恼
有相当多的一部分程序员一直都只接触业余应用的功能,天天写业务代码的程序员也被戏称为CURD程序员,CURD就是增(create).改(update).查(read).删(delete)的意思. CUR ...
- 静态方法与非静态方法的区别_程序员必看之ThinkPHP5中model与Db的区别
在ThinkPHP5的使用过程中,很多使用者刚接触到数据库操作时,不能很好调用相关的方法进行数据库的交互.下面就分享一下ThinkPHP5中Db与模型的区别 关于db与model的选择 使用DB方式是 ...
- java浪漫代码_程序员表白代码,用过的人都找到了对象...
在情人节送给自己的女朋友玫瑰花, 对于程序员来说是不是太普通了呢? 为什么不试试让情人节变得更特别一些呢? 作为一名程序员, 可以用自己的技术创造出不一样的浪漫! 让你的女朋友眼前一亮,印象深刻. 这 ...
- java程序员拜年代码_程序员的新年祝福是什么样的?
2019就要到来了, 马上要收到各种形形色色的新年祝福, 尽管有一些简单真诚的祝福语, 不过大多是千篇一律的罐头短信. 程序员作为一群高智商群体 在这辞旧迎新的时刻 怎么能一直玩那些老掉牙的梗呢! 你 ...
- c#12星座速配代码_程序员12星座性格分析,猜猜哪个星座最适合IT行业?
原标题:程序员12星座性格分析,猜猜哪个星座最适合IT行业? 身处IT职场,一个有趣的现象是:同为程序员,哪怕是同一种语言,每个程序员写起代码来还是有很多不一样的地方. 至于为何?或许可归结为星座及性 ...
- ms查约束具体代码_程序员写代码之前应该做的5件事,看完编程效率瞬间提升
作者:borisyang,腾讯 WXG 应用开发工程师 作为程序员,刚刚开始学会写代码,常常是接过需求就开始撸代码.有时候发现,写完代码,需求变了.更多时候,觉得写业务代码枯燥无聊,没有技术含量.另外 ...
- java写一个简单的浪漫代码_程序员的浪漫弹窗表白,圣诞节给Ta惊喜吧(附源码,简单易学哦)...
不要以为程序员都是木讷的,浪漫起来也会让很多妹子心动的.而程序员的表白方式也很不一般,通过一堆代码,无限释放浪漫.今天教给大家通过改写脚本语言,利用弹窗可充分自由发挥,用来表白或者恶搞都是不错的选择. ...
- 播放失败246106异常代码_程序员必须掌握的异常处理技巧和原则
Java中的异常机制是指:当程序在运行过程中遇到意外情况时会自动抛出一个Exception对象来通知程序,程序收到这个异常通知后可以采取各种处理措施,这种机制能使程序更加健壮,可读性更高.本文就来讲讲 ...
最新文章
- java ftp下载文件源码_java实现ftp文件下载的源代码
- Could not open ServletContext resource [/WEB-INF/springmvc-servlet.xml]【解决方案】
- Android屏幕适应详解(一)
- 使用python处理实验数据-yechen_pro_20171231
- Eclipse中各种文件【默认编码格式设置】,防止乱码等问题
- 第十八章 8string类insert成员函数的使用
- c# list 自定义排序
- cf1562E. Rescue Niwen!
- 这个点名系统太好用了,快来看看……
- Unix——optarg与getopt的用法
- L1-043 阅览室 (20 分)(在线模拟题)
- 解决filezilla中无法显示中文的文件名
- 栈的应用1——超级计算器(中缀与后缀表达式)C语言
- JQuery库BootStrap框架完整模板.html
- 如何通过蓝牙将PC与Windows Mobile 6的手持机连接,方便调试。
- 上海电力大学计算机专业考研好考么,上海电力大学(专业学位)计算机技术考研难吗...
- Java程序输出26个大写字母的ASCII对照表
- 洛谷P3373线段树2
- DiscuzX 数据字典 超详细
- 洛谷 P2071 座位安排 (最大流 + 建图)
热门文章
- Kali Linux常用服务配置教程安装及配置DHCP服务
- vue 解决跨域 调试_Electron-vue解决跨域
- zookeeper 分布式过程协同技术详解.pdf_阿里大牛耗时18个月整理这份ZooKeeper分布式详解文档...
- python flask实现博客系统_基于Flask的博客网站设计与实现
- python占多少空间_Python如何查看变量占用空间大小
- 计算机科普知识小动画,4岁嗯哼知识量惊呆杜江!这4部科普启蒙动画,孩子绝对不能错过...
- bootstrapr表格父子框_使用Bootstrap Table建立父子表
- 解决arXiv上传LaTeXpaper的坑
- flask从服务器获取html页面,flask的ajax、获取服务器数据、放到前端页面、如果数据存在显示标签、如果不存在不显示标签...
- ACM MM:一种基于情感脑电信号时-频-空特征的3D密集连接网络