Код, не дающий ответа (Алгоритм четвертичного поиска)

#python #python-3.x

Вопрос:

Итак, я новичок в кодировании, и я пытаюсь в качестве первого проекта создать алгоритм четвертичного поиска, я пытался сделать это рекурсивно, но это дало мне ошибку «максимальная рекурсия», поэтому я попытался сделать это итеративно, но на этот раз он даже не дает мне ответа, и я не знаю, почему, это код:

 def quaternary_search(y,x):
    low = 0
    high = len(y) -1
    mid1 = 0
    mid2 = 0
    mid3 = 0
    while high>=low:
        mid1 = int(round(high/4))
        mid2 = int(round(high/2))
        mid3 = int(round(3*high/4))

        if y[mid1] == x:
            return mid1
        
        elif y[mid2] == x:
            return mid2

        elif y[mid3] == x:
            return mid3

        elif y[mid1] > x and y[mid2] > x and y[mid3] > x:
            high = mid1 - 1

        elif y[mid1] < x and y[mid2] > x and y[mid3] > x:
            low = mid1   1
            high = mid2 - 1

        elif y[mid1] < x and y[mid2] < x and y[mid3] > x:
            low = mid2   1
            high = mid3 - 1

        elif y[mid1] < x and y[mid2] < x and y[mid3] < x:
            low = mid3   1

    return -1

y = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
x = int(input("What are you searching?"))

result = quaternary_search(y,x)

if result != -1:
    print("Element is at index",str(result))

else:
    print("Element is not found")

    ```
 

Ответ №1:

просто добавьте 1 переменную x при передаче ее в функцию. индексы списка начинаются с 0, поэтому вам нужно добавить 1.

 result = quaternary_search(y,x 1)
 

кажется, это работает с этим небольшим изменением, здесь, когда я ввожу 8, говорится, что он находится на 8-м индексе.

 What are you searching?8
Element is at index 8
 

Комментарии:

1. попробуйте ввести 6 свой код, и вы получите бесконечный цикл