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