1
A
回答
0
显然的问题是关于两个不同的东西,即
- 二进制搜索,可重复二者并递归执行;
- 关于调用堆栈的递归和迭代实现之间的差异。
二进制搜索是指在排序列表(或排序数组)中查找对象。策略是检查列表中间的对象;要么找到想要的对象,要么没有。如果找不到,则必须在列表的左半部分或右半部分进行搜索;无关的一半可以被丢弃。
这种方法可以迭代实现,其中辅助索引控制搜索。或者,它可以递归地实现,其中二分搜索相关的一半再次被调用。
在迭代实现中,对二进制搜索只有一个调用,这意味着不会为搜索生成新的堆栈帧。在递归实现中,为每个递归调用生成一个新的栈帧。由于每个步骤都会丢弃至少一半的搜索空间,这意味着最多可生成log(n)
新的堆栈帧(每次递归调用一个),其中n
是初始列表中的对象数。
0
SHORT:基本上,堆栈是系统用来在调用它时存储函数状态的一部分内存(参数,变量等)。对于更长的描述,你可以参考这个伟大的link。二进制搜索没有连接到堆栈,实际上,任何一段代码都可以使用堆栈。在你的情况下,你被要求的是当你调用你的二进制搜索功能时,描述堆栈的状态(如你提供的图片中的那个)。
相关问题
- 1. 递归系统堆栈分配
- 2. 递归Java - 堆栈
- 3. C++递归堆栈
- 4. 尾递归:堆栈溢出
- 5. 递归堆栈大小?
- 6. 递归反转堆栈
- 7. 尾递归堆栈溢出
- 8. 过程递归和堆栈
- 9. 递归:使用堆栈
- 10. openCL堆栈位置(递归)
- 11. 递归结果堆栈
- 12. Haskell递归堆栈溢出
- 13. 递归堆栈大小
- 14. 系统堆栈错误
- 15. 活动堆栈状态
- 16. cuda中的递归/堆栈和队列
- 17. 递归函数中的堆栈溢出
- 18. 堆栈上的递归函数
- 19. 递归方法中的堆栈溢出
- 20. 堆栈缺少递归调用Java的
- 21. 辐射1.1.0的系统堆栈错误
- 22. L系统和在玛雅的堆栈
- 23. Lisp堆栈溢出递归函数
- 24. 通过递归导致堆栈溢出
- 25. 计划和调用堆栈递归
- 26. Java堆栈与递归溢出
- 27. 递归调用堆栈深度
- 28. 递归函数堆栈溢出
- 29. 递归函数堆栈溢出
- 30. 递归堆栈内存分配