【问题标题】:RuntimeError: maximum recursion depth exceeded in PythonRuntimeError:Python 中超出了最大递归深度
【发布时间】:2015-05-04 23:47:57
【问题描述】:
#Recursive BinaryChop
def recursiveBinaryChop( value, elementList, min, max ):
    if len( elementList ) == 0:
        return -1
    if max <= min:
        if ( max == min and elementList[min] == value ):
            return min
        else:
            return -1
    else:
        midPointOfList = ( min + max ) / 2

        if elementList[midPointOfList] > value:
            max = --midPointOfList
            return recursiveBinaryChop( value, elementList, min, max )
        elif elementList[midPointOfList] < value:
            min = ++midPointOfList
            return recursiveBinaryChop( value, elementList, min, max )
        else:
            return midPointOfList

#Recursive BinaryChop Test Cases
assert recursiveBinaryChop(3, [], 0, 0) == -1
assert recursiveBinaryChop(3, [1], 0, 0) == -1
assert recursiveBinaryChop(1, [1], 0, 0) == 0
assert recursiveBinaryChop(1, [1, 3, 5], 0, 2) == 0
assert recursiveBinaryChop(3, [1, 3, 5], 0, 2) == 1
assert recursiveBinaryChop(5, [1, 3, 5], 0, 2) == 2
assert recursiveBinaryChop(0, [1, 3, 5], 0, 2) == -1
assert recursiveBinaryChop(2, [1, 3, 5], 0, 2) == -1
assert recursiveBinaryChop(4, [1, 3, 5], 0, 2) == -1
assert recursiveBinaryChop(6, [1, 3, 5], 0, 2) == -1
assert recursiveBinaryChop(1, [1, 3, 5, 7], 0, 3) == 0
assert recursiveBinaryChop(3, [1, 3, 5, 7], 0, 3) == 1
assert recursiveBinaryChop(5, [1, 3, 5, 7], 0, 3) == 2
assert recursiveBinaryChop(7, [1, 3, 5, 7], 0, 3) == 3
assert recursiveBinaryChop(0, [1, 3, 5, 7], 0, 3) == -1
assert recursiveBinaryChop(2, [1, 3, 5, 7], 0, 3) == -1
assert recursiveBinaryChop(4, [1, 3, 5, 7], 0, 3) == -1
assert recursiveBinaryChop(6, [1, 3, 5, 7], 0, 3) == -1
assert recursiveBinaryChop(8, [1, 3, 5, 7], 0, 3) == -1

我收到这个简单代码的运行时错误,我尝试过搜索,但所有答案似乎都建议设置递归限制,但我没有看到我的测试输入发生这种情况。我不确定我的算法是错误的还是有一些逻辑错误。我在C++ 有同样的算法为我工作。

请帮忙。

【问题讨论】:

  • ++ 相同。 +x 只是 +x 不变,所以 ++x = +(+x) = x
  • @Kevin 不幸的是它没有抛出任何错误,因此可能是这样的逻辑错误的来源,因为我来自 C/C++ 背景。
  • 顺便说一句,提供所有这些测试用例断言做得很好。我希望每个 SO 帖子都那么彻底:-)
  • @Kevin 我们如何编辑问题标题以反映 OP 遇到的真正问题并帮助其他人找到它?诸如“为什么 ++ 和 -- 在 Python 中不工作?”之类的东西?
  • @kdopen 有类似标题的问题,我不知道这只是我的无知。

标签: python recursion binary-search


【解决方案1】:

这两行不符合你的想法:

max = --midPointOfList
min = ++midPointOfList

Python 没有这种类型的自增运算符,但它们确实可以成功解析和执行。

++i 解析为 +(+i)--i 解析为 -(-i)。两者都保持i 不变并且有效

max = midPointOfList
min = midPointOfList

【讨论】:

  • 对于int 之类的变量,我不明白这个运算符的真实用例。
  • 重点是++-- 不是 Python 中的运算符。因此,Python 根据其实际语法对其进行解析。 +(+i) 表单是理解++ 的唯一方法。个人认为应该是语法错误。
【解决方案2】:
    if elementList[midPointOfList] > value:
        max = --midPointOfList
        return recursiveBinaryChop( value, elementList, min, max )
    elif elementList[midPointOfList] < value:
        min = ++midPointOfList
        return recursiveBinaryChop( value, elementList, min, max )

Python 没有 -- 或 ++ 运算符。如果您尝试递减和递增,请尝试“-1”和“+1”。

    if elementList[midPointOfList] > value:
        max = midPointOfList - 1
        return recursiveBinaryChop( value, elementList, min, max )
    elif elementList[midPointOfList] < value:
        min = midPointOfList + 1
        return recursiveBinaryChop( value, elementList, min, max )

(这与 C++ 的 --++ 的行为并不完全相同,因为 midPointOfList 的值保持不变,但在这种特殊情况下这似乎无关紧要;midPointOfList 没有'无论如何都不会在这些行之后被提及)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    • 2017-03-24
    • 2011-12-31
    相关资源
    最近更新 更多