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