我是新来的,我有一个困扰我的问题。我是初学者所以请不要嘲笑我。 我想对大量元素进行递归quicksort工作,比方说100000.I知道这会导致堆栈溢出。过去几天我一直在谷歌搜索试图找到管理调用堆栈的方法。我可以真的找不到好的信息来源。 我的想法是删除每个递归调用的返回地址,除了最后一个,它将返回到第一个函数调用。我不知道这是否可能,或者它是否是此问题的另一种解决方案。
P.S。 :我想让quicksort递归。
很抱歉,如果我的问题看起来很愚蠢,但是我会回答任何相关的答案。 对不起,我的英语不好。 谢谢!
答案 0 :(得分:3)
解决使用递归算法耗尽堆栈空间问题的标准方法是迭代实现它。
答案 1 :(得分:3)
请注意,数组中的100000项不算什么;这只会导致嵌套调用17个函数深度:
$ echo "l(100000)/l(2)" | bc -l
16.60964047443681173951
那是log(N)/log(2)
- log(2)
是将其转换为基准2。
任何支持递归函数调用的平台几乎肯定能够处理17个嵌套调用。
答案 2 :(得分:1)
如果堆栈空间有问题但通常内存不存在,则可以使用自己的堆分配堆栈轻松地将递归实现转换为迭代实现。也就是说,不是进行递归函数调用,而是将您关注的参数推送到您自己的堆栈数据结构中。然后,您可以迭代堆栈并处理每组参数。
答案 3 :(得分:0)
听起来你正在尝试进行尾递归,这里已经讨论过了;