Я пытаюсь реализовать бинарный поиск в Swift 4. Кажется, что код работает, за исключением того, что код падает до последнего оператора возврата. Я попытался поместить его в предложение else
, но получил предупреждение компилятора о том, что управление достигает конца не void. Я хочу, чтобы при соблюдении условий код возвращался раньше, а не завершался со значением -1 последнего оператора возврата.
let numbersArray:[Int] = [1, 2, 3, 4, 6, 6, 6, 7, 7, 8, 9, 11, 13, 15, 17, 19, 20]
var first: Int = 0
var last: Int = numbersArray.count - 1
func binarySearch(array: [Int], number: Int) -> Int{
if array.count == 0 {return -1}
else if array.count == 1{
if array[0] == number {return array[0]}
else {return -1}
}
let arrayMiddle: Int = array.count / 2
if number == array[arrayMiddle] {return array[arrayMiddle]}
else if number > array[arrayMiddle]{
first = arrayMiddle + 1
print("first in number > middle \(first)")
last = array.count - 1
print("last in number > middle \(last)")
let slice: [Int] = Array(array[first...last])
binarySearch(array: slice, number: number)
}
else if number < array[arrayMiddle]{
last = arrayMiddle - 1
print("last in number < middle \(last)")
first = 0
print("first in number < middle \(first)")
let slice: [Int] = Array(array[first...last])
binarySearch(array: slice, number: number)
}
print("got to last case")
return -1
}