Я новичок в python, поэтому не знаю, отсутствует ли я что-то очевидное (например, двоеточие или какой-то период).Двоичный поиск с использованием рекурсии переходит в бесконечный цикл
Я пытаюсь выполнить этот алгоритм бинарного поиска, но если я пройду список, превышающий 3 элемента, программа перейдет в бесконечное торможение рекурсии и максимум, установленный в python.
базовые шкафы работа хорошо.
[] и [element1] списки проходят.
[element1, element2, element3, ..., element99] застревают ...
Вот код:
def binsearch(pylist, element):
if len(pylist) == 0:
return False
elif len(pylist) == 1 and pylist[0] == element:
return True
else:
mid = len(pylist)/2 - 1
if element > pylist[mid]:
binsearch(pylist[mid:], element)
else:
binsearch(pylist[:mid], element)
Спасибо.
Это, вероятно, может помочь вам: https://interactivepython.org/runestone/static/pythonds/SortSearch/TheBinarySearch.html – iFlo
Подумайте о том, что произойдет, если вы запустите 'binsearch ([1], 2)'. –
Ничего очевидно для меня. В большинстве случаев интерпретатор Python будет диагностировать недостатки, подобные тем, которые вы упоминаете в любом случае (но не всегда, конечно). Совет. Приобретите среду разработки (IDE), которая позволяет установить точки останова, чтобы вы могли проверить содержимое переменных в своей программе или просто поместить временные инструкции * print *, чтобы вы могли найти, где ваши рассуждения прошли неправильно. –