Понимание использования оператора return
в recursion
Например, в бинарном поиске:
def binary_search_recur(array,start,end,item):
middle = int((start+end)/2)
#print (middle)
if (start>end):
return -1
else:
if array[middle]==item:
return middle
elif array[middle]>item:
return binary_search_recur(array,start,middle-1,item)
else:
return binary_search_recur(array,middle+1,end,item)
Вызов функции с помощью
array = [27,45,76,81,92,101,291]
binary_search_recur(array,0,len(array)-1,27)
Работает хорошо, если я добавлю оператор return
везде, но он не вернет 0
(индекс искомого элемента в примере), если я удалю оператор return
, как показано ниже
else:
if array[middle]==item:
return middle
elif array[middle]>item:
binary_search_recur(array,start,middle-1,item) #retrun statement removed
else:
binary_search_recur(array,middle+1,end,item) #retrun statement removed
Моя точка зрения Я хотел бы вернуться, когда я найду элемент, поэтому я возвращаю индекс middle
, или если элемент вообще отсутствует, поэтому в этом случае я возвращаю -1
, в противном случае я просто рекурсивно вызываю функцию с обновленным start
и end
index, так же, как сортировка слиянием
merge_sort(l)
merge_sort(r)
merge(l,r,array)
Так что я не понимаю, почему удаление оператора return
, как в примере, не возвращает op. Любые предложения будут великолепны.