/* 递归实现二分法的进化 */ import java.util.Scanner; public class RecursionNext2{ public static void main(String[]args) { //接收一个要寻找的数 System.out.println("请输入:"); Scanner sc=new Scanner(System.in); int num = sc.nextInt(); int []a={1,2,3,4,5,6,7,8,9}; int front = 0; int end=a.length-1; int index=findArray(a,front,end,num); System.out.println(index); } //递归实现二分法 public static int findArray(int []b,int front,int end,int num) { int index=-1; int mid = (front+end)/2; if(b==null) { return index; } if(front<=end){ if(b[mid]==num) { return mid; } else if(b[mid]<num) { return findArray(b,mid+1,end,num); } else if(b[mid]>num) { return findArray(b,front,mid-1,num); } } return -1; } }
分析此程序:
首先二分法:
/* 二分法 */ import java.util.Scanner; public class bisection{ public static void main(String[]args) { int []a={1,2,3,4,5,6,7,8}; Scanner sc=new Scanner(System.in); System.out.println("请输入你要找的数字"); int num=sc.nextInt(); //调用searchArray()寻找num int index=searchArray(a,num); System.out.println(index); } //二分法 public static int searchArray(int[]a,int num) { int front = 0; int end=a.length-1; int count =0; //判断数组是否为空 if(a==null) { return -1; } while(front<=end) { int mid=(front+end)/2; System.out.println("第"+(++count)+"次"); if(a[mid]==num) { return mid; } else if(a[mid]<num) { front=mid+1; } else if(a[mid]>num) { end=mid-1; } } return -1; } }
递归实际就是实现了循环的作用!
//判断数组是否为空 if(a==null) { return -1; }
第二限制循环的条件
保证front<=end,只有在这个前提下找的的位置才保证是在数组内部寻找
然后再去判断a[mid]是否等于num,若a[mid]<num说明num在数组的mid位置到end之间,所以将front=mid+1(因为你已经判断过mid位置上的数),当a[mid]>num相同原理....二分法是用front 和end来限制,让a[mid]去比较。
while(front<=end) { int mid=(front+end)/2; System.out.println("第"+(++count)+"次"); if(a[mid]==num) { return mid; } else if(a[mid]<num) { front=mid+1; } else if(a[mid]>num) { end=mid-1; } }