转载,详见原文:https://www.jianshu.com/p/3ce97d80436a
<meta charset="utf-8">
<article class="_2rhmJa">
关于栈stack,基本概念,今天主要说一下,调用栈call stack以及递归。
堆栈:是计算机科学,其特殊之处在于只能允许在链接串列或阵列的一端(top)进行加入数据(push)和输出数据(pop)的运算。特点是:后进先出,除头尾节点之外,每个元素有一个前驱,一个后继。
那么什么是调用栈呢?
官方的概念就不说了,函数的调用使用到的就是调用栈,经常用于存放程序的返回地址。

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

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

调用的过程:

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

如果出现栈溢出应该怎么办?两种方法:1.使用循环;2.尾递归
</article>
9人点赞
作者:LuDSh
链接:https://www.jianshu.com/p/3ce97d80436a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
网友评论