/*
递归实现二分法的进化 
 */
 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;
	 }
 }

递归实际就是实现了循环的作用!

二分法首先你要确定你所穿的数组不是空,并且使数组升序排列Java递归实现二分法_二分法

 //判断数组是否为空
		 if(a==null)
		 {
			 return -1;
		 }

第二限制循环的条件

保证front<=end,只有在这个前提下找的的位置才保证是在数组内部寻找

然后再去判断a[mid]是否等于num,若a[mid]<num说明num在数组的mid位置到end之间,所以将front=mid+1(因为你已经判断过mid位置上的数),当a[mid]>num相同原理....Java递归实现二分法_二分法_02二分法是用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;
			 }
		 }