Рекурсивный двоичный поиск python - PullRequest
0 голосов
/ 04 августа 2020

Я новичок в структурах данных и хочу спросить, почему мой двоичный поиск выдает ошибку.

Я пробовал работать в терминале vs c и выдает синтаксическую ошибку. Между тем, вкладка проблем не показывает никаких ошибок. были бы признательны за указатели!

def binarysearch(list,value):
    if list == [] or (len(list)==1 and list[0]!= value):
        return False
    else:
        mid = list[len(list)/2]
        if mid == value:
            return True
        elif mid > value:
            return binarysearch(list[:len(list)/2],value)
        else:
            return binarysearch(list[len(list)/2+1:],value)

a =[1,2,3,4,5,6,7,8]
value = 7

if binarysearch(a,value):
    print("found")
else:
    print("none")

Ответы [ 2 ]

0 голосов
/ 04 августа 2020

Возникла проблема с вашей индексирующей частью кода, попробуйте использовать символ // (целочисленное деление) вместо деления, чтобы получить приблизительное значение после деления, а не десятичное (с плавающей запятой):

def binarysearch(list,value):
if list == [] or (len(list)==1 and list[0]!= value):
    return False
else:
    mid = list[len(list)//2] # approximating the division to get an integer
    if mid == value:
        return True
    elif mid > value:
        return binarysearch(list[:len(list)//2],value)
    else:
        return binarysearch(list[len(list)//2+1:],value)
0 голосов
/ 04 августа 2020

Проблема в строках, которые вы вызываете рекурсией, индекс для разделения должен быть целым числом, а не числом с плавающей запятой. Попробуйте следующий код -

def binarysearch(list,value):
    if list == [] or (len(list)==1 and list[0]!= value):
        return False
    else:
        mid = list[int(len(list)/2)]
        if mid == value:
            return True
        elif mid > value:
            return binarysearch(list[:int(len(list)/2)],value)
        else:
            return binarysearch(list[int(len(list)/2)+1:],value)

a =[1,2,3,4,5,6,7,8]
value = 7

if binarysearch(a,value):
    print("found")
else:
    print("none")
...