【发布时间】: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