【问题标题】:Python RuntimeError: maximum recursion depth exceededPython RuntimeError:超出最大递归深度
【发布时间】:2015-04-15 21:37:55
【问题描述】:

我是 Python 新手。我写了一个函数,返回排序后的重复元素数组 A 中 x 的出现次数:

def FindFirstIndex(A, low, high, x, n):
   low = 0
   high = len(A) - 1
   if low <= high:
      mid = low + (high - low) / 2
      if (mid == 0 or x > A[mid - 1]) and A[mid] == x:
          return mid
      elif x > A[mid]:
          return FindFirstIndex(A, (mid + 1), high, x, n)
      else:
          return FindFirstIndex(A, low, (mid - 1), x, n)        
   return -1


def FindLastIndex(A, low, high, x, n):
   low = 0
   high = len(A) - 1
   if low <= high:
       mid = low + (high - low) / 2
       if (mid == n - 1 or x < A[mid + 1]) and A[mid] == x:
          return mid
       elif x < A[mid]:
          return FindFirstIndex(A, low, (mid - 1), x, n)
       else:
          return FindFirstIndex(A, (mid + 1), high, x, n)           
   return -1

def COUNT(A, x):
   i = FindFirstIndex(A, 0, len(A) - 1, x, len(A))
   if i == -1:
      return i
   j = FindLastIndex(A, i, len(A) - 1, x, len(A))
   length = j - i + 1
   return length

错误是:RuntimeError: 超出最大递归深度。 有人知道如何解决吗?

【问题讨论】:

  • 你能举个例子说明你得到这个错误吗?
  • 在函数FindFirstIndex中请提供elif条件你必须检查的内容。否则如果以上两个if条件为假,则每次都重复
  • 嘿@MohitBhasi 人,您指的是同一个问题,请编辑您的评论。谢谢
  • 检查您的FindFirstIndexlow=0high=len(A) - 1if low&lt;=high 来自 else 条件 else: return FindFirstIndex(A, low, (mid - 1), x, n),现在检查,如果您的 else 条件满足,low,high 总是固定的。所以它是递归重复的。那就是错误。您正在递归函数中将mid 更改为mid-1。但它不会检查任何地方。此外,您将mid 定义为lowhigh 的值,如果满足上述条件,则永远不会改变

标签: python recursion


【解决方案1】:

递归函数应该检查每个递归中的参数。还必须更改参数的值。否则它永远不会结束。例如

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)

提供n的阶乘

【讨论】:

    【解决方案2】:

    确定你可以使用:

    import sys
    sys.setrecursionlimit(3000)
    

    我相信 Python 的默认值是 1000,所以应该这样做。我提醒你,如果你尝试在一个非常大的列表上测试你的实现,python 可能会崩溃,所以我鼓励你迭代地重新实现你的代码

    【讨论】:

      猜你喜欢
      • 2017-03-18
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      • 2023-01-30
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      • 1970-01-01
      相关资源
      最近更新 更多