在写一个使用递归的简单选择排序的时候,发现栈总是会越界,无论设置栈大小为多少都会发生,现在对其做出如下解释:
1.代码如下
import random
import sys
sys.setrecursionlimit(1000000)
def sort_helper(list_, low, high):
if low < high:
indexofmin = low
min_ = list_[low]
for i in range(low+1, high):
if list_[i] < min_:
indexofmin = i
min_ = list_[i]
list_[indexofmin] = list_[low]
list_[low] = min_
# print(list_)
sort_helper(list_, low+1, high)
list_ = [random.randint(-1000, 1000) for i in random(3000)]
sort_helper(list_, 0, len(list_))
2.首先python为了防止栈溢出,设置了一个栈深的上限,如果需要的话可以通过以下方法改变其上限
但因为栈的空间大小较小(在windows中,栈的总大小默认为1MB),我尽管设置了1000000大小的栈深,实际上是增加的1000000个栈空间(可能每个栈空间大小仅为4B),但此程序每一轮都会传入函数的list为3000个整数,约为1KB。这样就算是申请了1000000个栈空间,也会发生栈越界。