87 |
88 | 89 |
90 | 95 |
96 |

1 栈和队列

97 |
98 |

1.1 栈与递归的关系

99 |

通常,当在一个函数的运行期间调用另一个函数时,在运行被调用函数之前,系统要做三件事:

100 |
    101 |
  • 将所有的实参,返回地址等信息调用传递给被调用函数保存;
  • 102 |
  • 为被调用函数的局部变量分配存储空间;
  • 103 |
  • 将控制权转移到被调用函数入口;
  • 104 |
105 |

一个递归函数的运行过程类似多个函数的嵌套调用,只是调用函数和被调用函数都是同一个函数,因此,每次调用本身时,就会产生一个调用相关的一个重要概念就是递归函数运行的“层次”.假设调用该递归函数的主函数为第0层,则从主函数调用递归函数进入到第一层,从第i层递归调用本函数进入下一层为第i+1层,反之退出第i层递归函数返回上一层为第i-1层; 106 | 为了保证递归函数正确执行,系统需要设立一个“递归工作栈”作为整个递归函数运行期间使用的数据存储区,每一层递归所需信息构成一个工作记录,其中包括所有实参,所有局部变量以及上一层的返回地址.每进入一层递归,就产生一个新的工作记录压入栈顶,每退出一个递归,就从栈顶弹出一个工作记录,则当前执行层的工作记录必须是递归工作栈栈顶的工作记录,此称为“活动记录”;【ChaosHeart】

107 |
108 |
109 |
110 | 111 |
112 |