RuntimeError:Python中超过了最大递归深度 #递归二进制代码 def recursiveBinaryChop(值、元素列表、最小值、最大值): 如果len(elementList)==0: 返回-1 如果最大值: max=--列表的中点 返回recursiveBinaryChop(值、元素列表、最小值、最大值) elif元素列表[中点列表]值: #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 max=--列表的中点 返回recursiveBinaryChop(值、元素列表、最小值、最大值) elif元素列表[中点列表]值: 最大值=列表中点-1 返回recursiveBinaryChop(值、元素列表、最小值、最大值) elif元素列表[中点列表]

RuntimeError:Python中超过了最大递归深度 #递归二进制代码 def recursiveBinaryChop(值、元素列表、最小值、最大值): 如果len(elementList)==0: 返回-1 如果最大值: max=--列表的中点 返回recursiveBinaryChop(值、元素列表、最小值、最大值) elif元素列表[中点列表]值: #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 max=--列表的中点 返回recursiveBinaryChop(值、元素列表、最小值、最大值) elif元素列表[中点列表]值: 最大值=列表中点-1 返回recursiveBinaryChop(值、元素列表、最小值、最大值) elif元素列表[中点列表],python,recursion,binary-search,Python,Recursion,Binary Search,我得到了这个简单代码的运行时错误,我尝试过搜索,但所有的答案似乎都建议设置递归限制,但我没有看到我的测试输入会发生这种情况。我不确定我的算法是错误的还是有逻辑错误。我在C++中使用了同样的算法 请提供帮助。如果元素列表[中点列表]>值: #Recursive BinaryChop def recursiveBinaryChop( value, elementList, min, max ): if len( elementList ) == 0: return -1

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

请提供帮助。

如果元素列表[中点列表]>值:
#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
max=--列表的中点 返回recursiveBinaryChop(值、元素列表、最小值、最大值) elif元素列表[中点列表]<值: 最小值=++列表中点 返回recursiveBinaryChop(值、元素列表、最小值、最大值)
Python没有--or++运算符。如果您尝试递减和递增,请尝试“-1”和“+1”

if elementList[midPointOfList]>值:
最大值=列表中点-1
返回recursiveBinaryChop(值、元素列表、最小值、最大值)
elif元素列表[中点列表]<值:
最小值=列表中点+1
返回recursiveBinaryChop(值、元素列表、最小值、最大值)

(这与C++的
-
++
的行为并不完全相同,因为
列表中点的值保持不变,但在这种特殊情况下,这似乎并不重要;
列表中点的值在这些行之后无论如何都不会被引用)

这两行并不是你所想的:

    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 )
Python没有这种类型的增量运算符,但它们确实能够成功地解析和执行

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

max = --midPointOfList
min = ++midPointOfList

++
相同
+x
只是
+x
没有改变,所以
+x
=
+(+x)
=
x
@Kevin不幸的是,它没有抛出任何错误,因此可能是这样的逻辑错误源,因为我来自
C/C++
背景。顺便说一句,提供所有这些测试用例断言的工作做得很好。我希望每一篇SO帖子都那么彻底:-)@Kevin我们如何编辑问题标题以反映OP遇到的真正问题并帮助其他人找到它?类似于“为什么不使用++和--Python?”@kdopen有一些标题类似的问题,只是我不知道这一点。我不理解
int
类变量的运算符的实际使用情况。关键是
++
--
不是Python中的运算符。因此,Python根据其实际语法解析它们。
+(+i)
表单是理解
+
的唯一方法。我个人认为这应该是一个语法错误。
max = --midPointOfList
min = ++midPointOfList
max = midPointOfList
min = midPointOfList