递归的系统堆栈状态

时间:2017-04-26 07:45:39

标签: stack

enter image description here

有人可以解释一下系统堆栈的状态吗?它是如何连接二进制搜索的?

2 个答案:

答案 0 :(得分:0)

显然问题是关于两个不同的事情,即

  1. 二进制搜索,可以迭代和递归方式实现;
  2. 关于调用堆栈的递归和迭代实现之间的区别。
  3. 二进制搜索是指在排序列表(或排序数组)中查找对象。策略是检查列表中间的对象;是否找到了所需的对象。如果找不到,则必须在列表的左半部分或右半部分进行搜索;不相关的一半可以丢弃。

    这种方法可以迭代地实现,其中维持了控制搜索的辅助索引。或者,它可以递归地实现,其中再次调用相关半部分的二进制搜索。

    在迭代实现中,只有一次调用二进制搜索,这意味着不会为搜索生成新的堆栈帧。在递归实现中,为每个递归调用生成新的堆栈帧。由于每个步骤丢弃至少一半的搜索空间,这意味着最多生成log(n)个新堆栈帧(每个递归调用一个),其中n是初始列表中的对象数

答案 1 :(得分:0)

简短:基本上,堆栈是系统用来存储函数状态的一部分内存(参数,变量等)。如需更长时间的描述,您可以参考这个伟大的link。二进制搜索没有连接到堆栈,事实上,任何一段代码都可以使用堆栈。在您的情况下,当您调用二进制搜索功能时,系统会要求您描述堆栈的状态(如图中所示)。