码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构之递归与调用栈

时间:2020-06-05 09:13:27      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:递归算法   间接   无限循环   使用   必须   image   递归调用   一个   数据   

1.递归

递归算法是一种直接或间接调用自身算法的过程。
每个递归函数都有两部分:基线 条件(base case)和递归条件(recursive case)。

  • 递归条件指的是函数调用自己的条件
  • 基线条件则指的是函数不再调用自己,函数的终止条件,避免形成无限循环 。

比如,如下打印数字的递归函数:
技术图片

2.调用栈

调用栈(call stack)也是一个很重要的数据结构。所有函数调用都进入调用栈,使用递归必须理解这个概念。
调用栈是的原则是先进后出,栈有两种操作:压入和弹出。。
比如,下面的函数
技术图片
首先调用greet("maggie"),计算机将首先为该函数调用分配一块内存。并将涉及的所有变量存入内存。
技术图片

再调用greet2("maggie")。同样,计算机也为这个函数调用分配一块内存。 计算机使用一个栈来表示这些内存块,其中第二个内存块位于第一个内存块上面。
技术图片

然后greet2("maggie")执行完毕,函数调用返回。此时,栈顶的内存块 greet2 被弹出。
技术图片

现在返回到了函数greet。当你调用函数greet2 时,函数greet只执行了一部分。调用另一个函数时,当前函数暂停 并处于未完成状态。该函数的所有变量的值都还在内存中。执行完函数greet2后,回到函数 greet,并从离开的地方开始接着往下执行。
这个栈用于 存储多个函数的变量,被称为调用栈。

3.递归调用栈示例

比如阶乘n!的递归函数

技术图片

以3!也就是fact(3)函数调用栈如下: 先从下到上堆栈,然后从基线条件往下出栈。

技术图片

4.递归调用栈的缺点

递归调用栈虽然很方便,如果栈很高,就意味着计算机存储了大量函数调用的信息,会占用大量内存。

数据结构之递归与调用栈

标签:递归算法   间接   无限循环   使用   必须   image   递归调用   一个   数据   

原文地址:https://www.cnblogs.com/laiyaling/p/13047470.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!