2015-02-06 3 views
0

получает «a» как «none» каждый раз. Я увеличиваю значение c, если элемент (ключ i.e) присутствует в списке и затем возвращает его. но idk, почему я не получаю ни одного ответа. Пожалуйста, обратите внимание: список уже отсортировандвоичный поиск рекурсивная функция не работает

list=[1,2,2,4,6,7,8,8,9] 

def binarysearch(list,key,s,e,c): 

    if(s<=e): 
     mid=int((s+e)/2) 
     if (key<list[mid]): 
      binarysearch(list,key,s,mid,c) 
     elif list[mid]==key: 
      c=c+1 
      return c 
     else: 
      binarysearch(list,key,mid+1,e,c) 
    else: 
     return c 

key=2 

a=binarysearch(list,key,0,len(list)-1,0) 

print(a) 
+0

В чем смысл 'c'? – dmg

+0

Вы пробовали с более коротким списком? –

+0

@dmg c - счетчик, который увеличивается, если ключ находится в списке, поэтому в этом случае c должен иметь значение 1 по мне, но я не получаю, –

ответ

0

Вы всегда должны возвращать результат вашей рекурсии:

return binarysearch(list,key,s,mid,c) 

и

return binarysearch(list,key,mid+1,e,c) 

Нет сомнений в том, что это домашнее задание, но только в том случае, вам действительно нужно это для реального, функциональность предоставляется в модуле stdlib bisect.

0

Каждый раз, когда у вас есть функция и не говорите им вернуть что-то, в данном случае:

if (key<list[mid]): 
    binarysearch(list,key,s,mid,c) 

и

else: 
    binarysearch(list,key,mid+1,e,c) 

вы получите ни один тип назад

0

На самом деле вы забыл вернуть результат каждого вызова функции. Вы можете просто добавить return заявление в свой код, иначе вот мой код.

def binarysearch(l, low, high, key): 
    while True: 
    if low > high: 
     return -1 
    mid = (low + high)/2 
    if l[mid] == key: 
     return mid 
    if l[mid] > key: 
     high = mid - 1 
    else: 
     low = mid + 1 
    return binarysearch(l, low, high, key) 
Смежные вопросы