python - 如何在这里克服最大递归深度超出错误?
问题描述
问题陈述如下:
返回数组中数字的总和,除了忽略以 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))
服务器不断抛出最大递归深度超出错误,我无法在服务器上纠正。任何线索将不胜感激。
解决方案
如果 7 出现在数组中对应的 6 之前,那么在一次迭代中,形成的新数组rem67()
将由一个包含 7 但没有 6 的部分组成,然后是一个包含 6 的部分。这在新数组,这将导致无限递归。
如果允许可能出现两个连续的 7,或者首先出现一个 7,那么最好执行以下操作:
index7 = nums.index(7, index6)
这使得 index7 引用了 6 之后的第一个 7,从而忽略了 6 之前可能出现的任何 7。
否则按照 Sefan 的建议返回错误代码是好的。
希望这能解决问题:)
推荐阅读
- excel - 基于另一个范围内该值的预设的单元格的背景颜色
- javascript - 密码正则表达式阻止方括号和空格?
- unit-testing - 在 IBM Cloud 中运行 .net 核心单元测试
- amazon-cloudformation - REST API openapi 规范 AWS API Gateway 与 serverless.com 框架的集成
- sql - 从Sql中的下一行中减去当前行的数据
- python - django核心管理中的未知命令
- javascript - 如何为负数获得正确的按位左移值?
- sql - 没有周末预言机功能的两个日期之间的差异
- java - 在不使用 RAM 的情况下从 Internet 下载文件并显示进度条
- php - 如何对这个循环进行分页?