【发布时间】:2019-10-08 12:42:20
【问题描述】:
有人知道为什么我的 快速排序 会出现以下递归错误吗?不知道为什么我会收到“RecursionError:比较超出最大递归深度”。我问过其他人,他们说我的递归不应该超过:
代码如下:
def merge(array, low, mid, high):
i,j,k = low,mid+1,low
leftarray = array[low:mid+1]
rightarray = array[mid+1:high+1]
temp= [0]*high
while i<=mid and j<=high:
if array[i]<array[j]:
temp[k] = array[i]
i+=1
else:
temp[k] = array[j]
j+=1
k+=1
if i>mid:
temp[k:high+1] = array[j:high+1]
else:
temp[k:high+1] = array[i:mid+1]
array[low:high+1] = temp[low:high+1]
还有错误
(base) b98-aruba1-guest-10-110-7-206:desktop ericadamian$ python Quicksort1.py
RecursionError: maximum recursion depth exceeded in comparison
(base) b98-aruba1-guest-10-110-7-206:desktop ericadamian$
【问题讨论】:
-
递归函数的终止条件是什么?
-
Quicksort1(array, index, low, index + 1)这是一个无限递归。它将使用相同的low和index值调用自己。 -
在第一次递归调用中可能应该是
-1而不是+1- 你的high值每次都越来越大,所以if语句将永远是 @987654333 @ -
请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Exchange (SE) 网络上发帖,您已在 CC BY-SA 4.0 license 下授予 SE 分发内容的不可撤销的权利(即无论您未来的选择如何)。根据 SE 政策,分发非破坏版本。因此,任何破坏行为都将被撤销。请参阅:How does deleting work? …。如果允许删除,则帖子下方左侧有一个“删除”按钮,但仅在浏览器中,而不是移动应用程序中。