Python 超出递归限制
Posted
技术标签:
【中文标题】Python 超出递归限制【英文标题】:Python exceeds recurssion limit 【发布时间】:2022-01-21 17:50:10 【问题描述】:我正在尝试使用分而治之的策略开发一种合并排序算法。但是,在除法部分中,我遇到了一个超出递归的递归错误。这是我所拥有的:
c = [3,5,4,2,1,6,7]
def mergesort(nums):
if len(nums) == 1:
return
n = len(nums)//2
a = c[:n]
b = c [n:]
mergesort(a)
mergesort(b)
i = 0
j = 0
k = 0
mergesort(c)
【问题讨论】:
可能是因为 mergesort 正在调用自己。如果在自身内部调用太多次,这可能会导致麻烦。 Python 不能修改全局变量,除非该变量被声明为global
inisde 函数。变量也是按值传递给函数的。
见towardsdatascience.com/…。该函数返回一个部分列表,而不是尝试修改传递值的局部变量。
【参考方案1】:
这是因为您正在修改全局 c
列表,而不是参数 nums
列表(这是您的退出条件)。
c = [3,5,4,2,1,6,7]
def mergesort(nums):
if len(nums) == 1:
return
n = len(nums)//2
a = nums[:n] # Don't use c[:n] here
b = nums[n:] # Don't use c[n:] here
print ('nums: \n\n\n\n'.format(nums, a, b))
mergesort(a)
mergesort(b)
mergesort(c)
【讨论】:
以上是关于Python 超出递归限制的主要内容,如果未能解决你的问题,请参考以下文章