Użycie rekurencyjnego algorytmu dwusiecznego do sprawdzenia, czy znak jest w łańcuchu
Obecnie prowadzę kurs programistyczny w edx, a moje instrukcje są następujące: Korzystając z idei wyszukiwania bisekcji, napisz algorytm rekurencyjny, który sprawdza, czy znak jest zawarty w ciągu, o ile ciąg jest w porządku alfabetycznym. Mój kod (python 2.7) jest tutaj:
def isitIn(char, aStr):
m = aStr[len(aStr) // 2]
if aStr == '' or len(aStr) == 1 or char == m:
return False
else:
if char < m:
return isitIn(char, aStr[:-1])
elif char > m:
return isitIn(char, aStr[1:])
return isitIn(char, aStr)
Moje wyjaśnienie: zaczynam od znalezienia środkowego znaku ciągu. Jeśli jest równy postaci, zwraca False. Jeśli nie jest równy znakowi, sprawdza, czy znak jest niższy od znaku średniego, a następnie używa funkcji rekurencyjnej do utworzenia stosów i ostatecznie zwraca wartość logiczną True. Teraz użyłem indeksu -1 i 1, ponieważ nie chcę uwzględniać środkowego znaku.
Zamiast rozwiązania, wolałbym uzyskać wskazówki, ponieważ wciąż próbuję to rozgryźć, ale inna perspektywa nigdy nie boli. Dzięki!
Error message:
Test: isIn('a', '')
Your output:
Traceback (most recent call last):
File "submission.py", line 10, in isIn
m = aStr[len(aStr) // 2]
IndexError: string index out of range
Correct output:
False