关于调用函数使用栈
为什么函数调用要用栈实现? - 牛岱的回答 - 知乎 https://www.zhihu.com/question/34499262/answer/1169592250
函数调用基本都是使用栈, 原因就是函数调用的LIFO特性。
一个递归算法,如果其出口的条件永远无法满足,函数的调用栈就会持续增长,发生 stack overflow。这是因为每进行一次递归调用,栈都增长一次,递归的 深度,决定的 栈 增长的高度。
那么回到原来的问题,为什么要用 栈 来记录函数调用过程?
我们想一下这样一个过程:
void c() {
d()
}
在上面的代码中,函数 c 的内部调用了函数 d,那么函数的进入和离开的先后顺序是这样的:
c 开始 -> d 开始 -> d 结束 -> c 结束
c 函数先进去的,但是它更晚才出来,这就是你熟悉的 FILO,或者 LIFO,满足这个条件的数据结构,就是你最熟悉的 栈。
所以堆栈这个数据结构,真正模拟的,其实是 嵌套关系,一切具备嵌套性质的东西,用堆栈做是最自然的。