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 超出递归限制的主要内容,如果未能解决你的问题,请参考以下文章

Python递归限制与堆栈大小?

超出堆栈限制(0.2Gb)...可能无限递归(循环):

Python递归函数错误:“超出最大递归深度” [重复]

处理超出最大递归深度

Python:超出最大递归深度

Python:打印自定义异常时超出最大递归深度