Я не понимаю, как он возвращает правильный ответ
def bsearch(array, target)
return nil if array.length == 0
midpoint = array.length / 2
case target <=> array[midpoint]
when -1
bsearch(array.take(midpoint), target)
when 0
midpoint
when 1
index = bsearch(array.drop(midpoint + 1), target)
(index.nil?) ? nil : (midpoint + 1) + index
end
end
p bsearch([1, 3, 4, 5, 9], 5) # => 3
p bsearch([1, 2, 3, 4, 5, 6], 6) # => 5
Каким-то образом он переходит с линии 10 (где он должен возвращать среднюю точку) на 13, где он каким-то образом снова получает исходный массив?!
Здесь была моя попытка, но она не удалась, возвращая среднюю точку последней рекурсивной версии массива
def bsearch(array, target)
return nil if array.length == 0
aim = array.length / 2
return nil if array.length == 1 && array[0] != target
case target <=> array[aim]
when 0
aim
when -1
bsearch(array[0...aim], target)
when 1
bsearch(array[aim..-1], target)
end
end