package main
import "fmt"
func main() {
//二分法查找思路,目标数findVal
/*
arr是一个有序数组,并且是从小到大排序
先找到中间的下标middle=(leftindex + rightindex) / 2,然后让中间下标的值和findVal比较
如果arr[middle] > findVal, 则进入leftIndex - (middle-1)范围查找
如果arr[middle] < findVal, 则进入(middle-1) - rightIndex范围查找
如果arr[middle] = findVal, 就找到了findVal
重复以上操作
退出递归的条件
如果leftindex > rightindex
*/
arr := [6]int{1, 8, 10, 89, 1000, 1024}
BinaryFind(&arr, 0, len(arr)-1, 1024)
}
func BinaryFind(arr *[6]int, leftindex int, rightindex int, findVal int) {
//退出递归的条件
if leftindex > rightindex {
fmt.Println("没找到")
return
}
middle := (leftindex + rightindex) / 2
if (*arr)[middle] > findVal {
//没找到,中间值大于目标值,因此要在左边查找
BinaryFind(arr, leftindex, middle-1, findVal)
} else if (*arr)[middle] < findVal {
//没找到,中间值小于目标值,因此要在右边查找
BinaryFind(arr, middle+1, rightindex, findVal)
} else {
fmt.Printf("找到了, 下标为: %v\n", middle)
}
}