我试图在按字母顺序排列的字符串中找到一个字符......这是代码
def isIn(char, aStr):
middleChar = len(aStr)//2
if char == aStr[middleChar]:
return True
elif char < aStr[middleChar]:
LowerHalf = aStr[:middleChar]
return isIn(char, LowerHalf)
elif char > aStr[middleChar]:
UpperHalf = aStr[middleChar:]
return isIn(char, UpperHalf)
else:
return False
print(isIn('a', 'abc'))
它返回True。但是当我把
print(isIn('d', 'abc'))
它返回此错误:比较超出最大递归深度;而不是假。
我不明白什么是错的。请告诉我我正在做的逻辑错误在哪里。
答案 0 :(得分:0)
使用d,程序从abc中分割出字符串并选出UpperHalf bc
。然后它搜索新字符串bc
。然后它返回&#39; c&#39;来自&#39;&#39;正如所料。由于d> c,程序选择该条件并再次返回字符串&#39; c&#39;的上半部分,即c。因此递归。要解决此问题,您需要一种处理长度为1的字符串的单独方法。
答案 1 :(得分:0)
最后else
没用 - 它永远不会被执行。
二进制搜索的结束是当数组变为一个项目时 - 如果此项目不是搜索项目,则搜索的项目不在数组中。