递归实现二分查找
在我们所学的正常二分查找中都是在不断缩小范围查找,判断的也是同样的事情,满足递归的条件,接下来救赎写一下;
案例
代码如下:
package com.itheima.algorithm.recursion;
//递归实现二分查找
public class E03BinarySearch {
//这个函数用来封装了下面的递归函数,使得(参数简化)调用者能更简单的调用
public static int search(int[] a, int taget){
return f(a, taget, 0, a.length - 1);
}
private static int f(int[] a, int target, int i, int j) {
if(i > j) return -1; //找不到退出
int m = (i + j) >>> 1;
if(target < a[m]) {
return f(a, target, i, m - 1);
} else if(a[m] < target) {
return f(a, target,m + 1, j);
} else return m; //找到返回 m;
}
public static void main(String[] args) {
int[] a = {7, 13, 21, 30, 38, 40, 44, 52, 53};
System.out.println(search(a, 52));
}
}
private static int f(int[] a, int target, int i, int j)
- 这个是我们的递归函数
- 先看if循环进入了一个if后面的就不会触发,如果是第一个则进入f(a, target, i, m - 1);反之进入第二个f(a, target,m + 1, j),如果找到了也就是m = taget则直接退出。(这里递归函数之后没有其他逻辑,所以直接从里到外退出)
public static int search(int[] a, int taget)
- 这个函数用来封装了下面的递归函数,使得(参数简化)调用者能更简单的调用