Функция никогда не возвращается True
. Я думаю, что он должен возвращать True
, когда char == m
, поэтому вы можете удалить его из if-clause
(который возвращает False
) и поместить его в другой if
:
if char == m:
return True
elif aStr == '' or len(aStr) == 1:
return False
else:
...
Кроме того, вы вызываете метод isIn
, который не определен. Я думаю, что вы хотели рекурсивно называть isitIn
.
После сравнения char < m
и char > m
вы должны «делить пополам» строку, поэтому не делайте return isitIn(char, aStr[:-1])
и return isIn(char, aStr[1:])
, вместо этого пропустите (в рекурсивном вызове) «половина» строки.
if char < m:
return isitIn(char, aStr[:len(aStr) // 2])
elif char > m:
return isitIn(char, aStr[len(aStr) // 2:])
Редактирование: на всякий случай, код, который я пробовал:
def isitIn(char, aStr):
if aStr == '': # Check for empty string
return False
m = aStr[len(aStr) // 2]
if char == m:
return True
elif len(aStr) == 1:
return False
else:
if char < m:
return isitIn(char, aStr[:len(aStr) // 2])
elif char > m:
return isitIn(char, aStr[len(aStr) // 2:])
return isitIn(char, aStr)