数据结构——栈以及堆栈溢出

关于栈stack,基本概念,今天主要说一下,调用栈call stack以及递归。

堆栈:是计算机科学,其特殊之处在于只能允许在链接串列或阵列的一端(top)进行加入数据(push)和输出数据(pop)的运算。特点是:后进先出,除头尾节点之外,每个元素有一个前驱,一个后继。

那么什么是调用栈呢?

官方的概念就不说了,函数的调用使用到的就是调用栈,经常用于存放程序的返回地址。

这个函数的调用过程是这样:

在递归中就用到了调用栈,先用递归实现一下阶乘,然后我们看以下调用的过程。

调用的过程:

从图中我们可以看到,在递归的过程中,需要占用内存的调用栈会越来越多,那么如果是一个无线递归的函数,势必会面临栈溢出的问题,当然了即便不是无限的,层数太多的话也会面临堆栈溢出的问题。因此在使用递归函数的时候,需要注意基线条件和调用条件的书写,基线条件保证不会出现无限递归的情况。

如果出现栈溢出应该怎么办?两种方法:1.使用循环;2.尾递归

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 原文地址:C语言函数调用栈(一)C语言函数调用栈(二) 0 引言 程序的执行过程可看作连续的函数调用。当一个函数执...
    小猪啊呜阅读 10,264评论 1 19
  • 0. 引言 如果你学的第一门程序语言是C语言,那么下面这段程序很可能是你写出来的第一个有完整的 “输入---处理-...
    pandolia阅读 14,819评论 13 27
  • 1.栈 1.1.栈的定义 栈(stack)是限定仅在表尾(栈顶 top)进行插入和删除操作的后进先出的线性表。 p...
    JonyFang阅读 5,356评论 0 21
  • 一、为什么探讨这个话题。 随着信息传递方式的不断升级,尤其是移动互联网和自媒体的发展,在企业管理领域各种领域的所谓...
    _单旭东_阅读 4,035评论 0 3
  • 张小川已经有7天没有回家。她在100公里以外的姨妈家里住得浑身不自在,特大城市总有点紧绷的意头,早晚高峰憋死了...
    梦蝶Ariel阅读 3,440评论 0 1

友情链接更多精彩内容