即時嘗試使用mergesort來對數字列表進行排序,並比較排序方法(氣泡,選擇等)之間排序長度不同的列表所花費的時間如何不同。所以我用下面的代碼來測試:比較錯誤python超出最大遞歸深度?
k=0
times=[]
while k<n:
x=list(range(1,2**k))
shuffle(x)
start=clock()
selectionsort(x)
end=clock()
times.append(end-start)
k=k+1
return(times)
其中洗牌是我的洗牌排序的代碼,這將改變以歸併和選擇排序。當我測試shuffle排序和選擇排序時,代碼根據需要運行,但是當我測試mergesort時,我得到的比較錯誤超出了最大遞歸深度。我的合併代碼如下:
def mergesort(list):
if len(list) == 1:
return list
m = len(list)//2
l = mergesort(list[:m])
r = mergesort(list[m:])
if len(l)<1 or len(r)<1:
return l or r
result = []
i = j = 0
while (len(result)<len(r)+len(l)):
if l[i] < r[j]:
result.append(l[i])
i = i+1
else:
result.append(r[j])
j = j+1
if i == len(l) or j == len(r):
result.extend(l[i:] or r[j:])
break
return result
任何人都可以提出爲什麼我可能會得到這個錯誤?提前致謝!
我會建議你閱讀合併排序的工作方式。它由兩個不同的功能構成 - 一個是將列表拆分成另外兩個,第二個將它們合併。 https://en.wikipedia.org/wiki/Merge_sort – Nf4r
請發佈錯誤的完整堆棧跟蹤,以及您對該函數的實際輸入。 – poke