找不到错误 - 使用递归进行二叉搜索


/*for the elements which are present in the code, the code runs succesfully but for the elements which
are not in the array list showing error in code statement no. 33*/
package recursion;
public class BinarySearch {
public static void main(String args[])
{
int array[]={1,2,5,6,7,32,38,48,75,87,98};// 11 elements
int find=3;
boolean ans=binarySearch(find, array, 0, array.length-1);
if(ans==true)
System.out.println("Number Available");
else
System.out.println("Number not Available");
}
static boolean binarySearch(int valToFind, int arr[], int start, int end)
{
boolean avail=false;
if(start == end)
{
if(arr[start]==valToFind)
avail=true;
else
avail=false;        
}
int mid;
mid=findmid(arr,start,end);
if(arr[mid]>valToFind)
binarySearch(valToFind,arr,start,mid-1);
else if(arr[mid]<valToFind)
binarySearch(valToFind,arr,mid+1,end);
else if(arr[mid]==valToFind)
avail= true;
return avail;
}
static int findmid(int arr[],int start, int end)
{
int mid = (start+end)/2;
return mid;
}
}

一个问题是你忽略了递归调用返回的值。

另一个问题是,在停止条件下 - 当start == end时 - 你设置了你想要返回的值(avail(,但随后你继续递归而不是立即返回。

这有效:

static boolean binarySearch(int valToFind, int arr[], int start, int end)
{
if(start == end) {
return arr[start]==valToFind;
}
int mid = findmid(arr,start,end);
if(arr[mid]>valToFind)
return binarySearch(valToFind,arr,start,mid-1);
else if(arr[mid]<valToFind)
return binarySearch(valToFind,arr,mid+1,end);
else if(arr[mid]==valToFind)
return true;
return false;
}

最新更新