2017-10-08 77 views
0

我试图找到按字母顺序排列的字符串的字符超过了...以下是代码错误:最大递归深度比较

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')) 

它返回此错误:最大递归深度超过比较;而不是False。

我不明白什么是错的。请告诉我我在做什么逻辑错误。

回答

0

用d,程序将字符串从abc中分离出来并挑选出UpperHalf bc。然后它搜索新字符串bc。然后按照预期从'bc'返回'c'。由于d> c,程序会选择该条件并再次返回字符串'c'的上半部分,即c。因此递归。要解决这个问题,你需要一个处理长度为1的字符串的单独方式。

+0

谢谢了......如果字符串长度为1,那么该字符肯定是字符串。否则尝试将字符串分成一半,现在如果长度为零,则返回False。 – mnislam01

0

最后的else没用 - 它永远不会执行。

二进制搜索的结尾是数组变成一个项目时 - 如果该项目不是搜索的项目,则搜索到的项目不在数组中。