关于算法:算法图解递归调用栈

4次阅读

共计 451 个字符,预计需要花费 2 分钟才能阅读完成。

这个盒子里有盒子,而盒子里的盒子又有盒子。钥匙就在某个盒子中。为找到钥匙,你将使 用什么算法? 先想想这个问题,再接着往下看。

上面是一种办法。

  • 第一种办法应用的是 while 循环: 只有盒子堆不空,就从中 取一个盒子,并在其中认真查找。

上面是另一种办法:

  • 第二种办法应用递归——函数调用本人

基线条件和递归条件:

  • 编写递归函数时,必须通知它何时进行递归。正因为如此,每个递归函数都有两局部: 基线 条件 (base case) 和递归条件(recursive case)。递归条件指的是函数调用本人,而基线条件则 指的是函数不再调用本人,从而防止造成有限循环。

栈:

计算机在外部应用被称为调用栈的栈。咱们来看看计算机是如何应用调用栈的。

应用栈尽管很不便,然而也要付出代价: 存储详尽的信息可能占用大量的内存。每个函数调 用都要占用肯定的内存,如果栈很高,就意味着计算机存储了大量函数调用的信息。在这种状况 下,你有两种抉择。

  • 从新编写代码,转而应用 循环
  • 应用尾递归。这是一个高级递归主题,不在本书的探讨范畴内。另外,并非所有的语言都反对尾递归。
正文完
 0