swift - 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
}
解决方案
您在binarySearch
不返回结果的情况下递归调用两次。
推荐阅读
- python - 为什么 matplotlib 会为数据列表生成线性图?
- javascript - 动态页面创建 - React
- javascript - 在 node.js 中使用函数数组可以正常工作,但是 await 不等待?
- angular - Angular - 在 canActivate 中捕获路由器路径模式
- php - Curl PHP - 400 错误无法满足请求
- python - 如何用python中的其他文件替换文件
- ios - 检查枚举中是否存在值
- vb.net - 在 VB.NET 中过滤 SQL 数据表
- ode - MAPLE:使用狄拉克作为输入函数解决 RLC 电路的 ODE 的问题
- algorithm - 分而治之三叉树搜索