错误:比较时超出了最大递归深度

时间:2017-10-08 06:46:20

标签: python-3.x recursion

我试图在按字母顺序排列的字符串中找到一个字符......这是代码

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

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

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

2 个答案:

答案 0 :(得分:0)

使用d,程序从abc中分割出字符串并选出UpperHalf bc。然后它搜索新字符串bc。然后它返回&#39; c&#39;来自&#39;&#39;正如所料。由于d> c,程序选择该条件并再次返回字符串&#39; c&#39;的上半部分,即c。因此递归。要解决此问题,您需要一种处理长度为1的字符串的单独方法。

答案 1 :(得分:0)

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

二进制搜索的结束是当数组变为一个项目时 - 如果此项目不是搜索项目,则搜索的项目不在数组中。