首页 > 解决方案 > 如何在这里克服最大递归深度超出错误?

问题描述

问题陈述如下:

返回数组中数字的总和,除了忽略以 6 开头并延伸到下一个 7 的数字部分(每个 6 后面至少有一个 7)。如果没有数字,则返回 0。

sum67([1, 2, 2]) → 5
sum67([1, 2, 2, 6, 99, 99, 7]) → 5
sum67([1, 1, 6, 7, 2]) → 4

我知道这里在堆栈溢出时发布了同样的问题,但我不想请求新的解决方案,而是想知道我自己的递归解决方案可能会出现什么问题。

我的尝试:

def sum67(nums):
  def rem67(nums):
    if 6 not in nums:
      return nums
    index6 = nums.index(6)
    index7 = nums.index(7)
    nums = nums[:index6] + nums[(index7 + 1):]
    return rem67(nums)
  return sum(rem67(nums))

服务器不断抛出最大递归深度超出错误,我无法在服务器上纠正。任何线索将不胜感激。

标签: pythonpython-3.xrecursion

解决方案


如果 7 出现在数组中对应的 6 之前,那么在一次迭代中,形成的新数组rem67()将由一个包含 7 但没有 6 的部分组成,然后是一个包含 6 的部分。这在新数组,这将导致无限递归。

如果允许可能出现两个连续的 7,或者首先出现一个 7,那么最好执行以下操作:

index7 = nums.index(7, index6)

这使得 index7 引用了 6 之后的第一个 7,从而忽略了 6 之前可能出现的任何 7。

否则按照 Sefan 的建议返回错误代码是好的。

希望这能解决问题:)


推荐阅读