关于栈stack,基本概念,今天主要说一下,调用栈call stack以及递归。
堆栈:是计算机科学,其特殊之处在于只能允许在链接串列或阵列的一端(top)进行加入数据(push)和输出数据(pop)的运算。特点是:后进先出,除头尾节点之外,每个元素有一个前驱,一个后继。
那么什么是调用栈呢?
官方的概念就不说了,函数的调用使用到的就是调用栈,经常用于存放程序的返回地址。
这个函数的调用过程是这样:
在递归中就用到了调用栈,先用递归实现一下阶乘,然后我们看以下调用的过程。
调用的过程:
从图中我们可以看到,在递归的过程中,需要占用内存的调用栈会越来越多,那么如果是一个无线递归的函数,势必会面临栈溢出的问题,当然了即便不是无限的,层数太多的话也会面临堆栈溢出的问题。因此在使用递归函数的时候,需要注意基线条件和调用条件的书写,基线条件保证不会出现无限递归的情况。
如果出现栈溢出应该怎么办?两种方法:1.使用循环;2.尾递归
网友评论