关于调用函数使用栈

为什么函数调用要用栈实现? - 牛岱的回答 - 知乎 https://www.zhihu.com/question/34499262/answer/1169592250

 函数调用基本都是使用栈, 原因就是函数调用的LIFO特性。

 

一个递归算法,如果其出口的条件永远无法满足,函数的调用栈就会持续增长,发生 stack overflow。这是因为每进行一次递归调用,栈都增长一次,递归的 深度,决定的 增长的高度。

那么回到原来的问题,为什么要用 来记录函数调用过程?

我们想一下这样一个过程:

void c() {
    d()
}

在上面的代码中,函数 c 的内部调用了函数 d,那么函数的进入和离开的先后顺序是这样的:

c 开始 -> d 开始 -> d 结束 -> c 结束

c 函数先进去的,但是它更晚才出来,这就是你熟悉的 FILO,或者 LIFO,满足这个条件的数据结构,就是你最熟悉的

 

所以堆栈这个数据结构,真正模拟的,其实是 嵌套关系,一切具备嵌套性质的东西,用堆栈做是最自然的。

posted @ 2021-06-08 10:26  Tarzen  阅读(130)  评论(0编辑  收藏  举报