首页 > 解决方案 > Swift Binary Search 失败到最后一个 return 语句

问题描述

我正在尝试在 Swift 4 中实现二进制搜索。代码似乎可以工作,只是代码正在落入最后一个 return 语句。我尝试将它放在一个else子句中,但得到一个编译器警告,说控制到达非无效结尾。我想要它,所以如果满足条件,代码将提前返回并且不会以最后一个返回语句的 -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
}

标签: swift

解决方案


您在binarySearch不返回结果的情况下递归调用两次。


推荐阅读