我正在参加 Coursera 的在线课程“算法:设计与分析,第 1 部分”,并且刚刚完成了第二个作业。但是在我做的过程中,我无法解释一个由python运行时错误引起的现象。
我不应该分发解决方案代码......所以我只写一些摘录。
def quick_sort_count (arr, index, median=False):
# SOME OPERATIONS
......
# Termination
if len(arr)==0 or len(arr)==1:
return arr, 0
........
arr[:i-1], t1 = quick_sort_count(arr[:i-1], index, median)
arr[i:], t2 = quick_sort_count(arr[i:], index, median)
return arr, len(arr)+t1+t2-1
该程序应分析具有 10,000 个唯一编号的数据文件,并计算快速排序中有多少“比较”。该问题包含三个部分:使用第一个元素作为比较的枢轴;使用最后一个;并使用“中位数”。
奇怪的是,我可以通过单独运行任何一个问题来得到正确的答案。但我不能在一个函数中同时运行这三个函数,例如
def main():
# READING THE FILE
......
_,result1 = quick_sort_count(arr1, 0)
_,result2 = quick_sort_count(arr2, -1)
_,result3 = quick_sort_count(arr3, 0, True)
如果我这样做了,那么将出现“RuntimeError:超出最大递归深度”。喜欢的东西
....
arr[:i-1], t1 = quick_sort_count(arr[:i-1], index, median)
File "/Users/c/algorithm/quick_sort.py", line 43, in quick_sort_count
arr[:i-1], t1 = quick_sort_count(arr[:i-1], index, median)
File "/Users/c/algorithm/quick_sort.py", line 43, in quick_sort_count
arr[:i-1], t1 = quick_sort_count(arr[:i-1], index, median)
File "/Users/c/algorithm/quick_sort.py", line 43, in quick_sort_count
arr[:i-1], t1 = quick_sort_count(arr[:i-1], index, median)
File "/Users/c/algorithm/quick_sort.py", line 43, in quick_sort_count
arr[:i-1], t1 = quick_sort_count(arr[:i-1], index, median)
File "/Users/c/algorithm/quick_sort.py", line 33, in quick_sort_count
arr = swap(arr, index, 0)
RuntimeError: maximum recursion depth exceeded
“swap”只是一个简单的操作,改变了arr[index]和arr[0]的位置,这是第二个问题的要求——“使用最后一个元素作为pivot元素并将其交换到之前的第一个元素排序”。
如果我通过进一步增加递归限制
import sys
sys.setrecursionlimit(100000)
那么第 2 题和第 3 题就会有错误的答案。
有人能告诉我为什么会这样吗?非常感谢!