2015-05-31 48 views
0

我是新來編程和編寫代碼遞歸二進制搜索,但輸出是錯誤的。
我試着調試過很多次,但不知道自己出錯的地方。錯誤的結果在二進制搜索在Java

public class Number { 
    public static void main (String[] args){ 
     int []a = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19}; 
     int key = 7; 
     int mid,low,high; 
     low=0; 
     high=a.length-1; 
     int pos=binarySearch(a,key,low,high); 
     System.out.println(key +" is found at "+pos+" position"); 
    } 

    public static int binarySearch(int[]a,int key,int low, int high) { 

     int mid=(low+high)/2; 

     if(key<a[mid]){ 
      high=mid-1; 
      binarySearch(a,key,low,high); 
     } 
     else if(key >a[mid]){ 
      low=mid+1; 
      binarySearch(a,key,low,high); 
     } 
     else if(low>high){ 
      return -1; 
     } 
     return mid; 
    } 
} 
+3

輸出是什麼? – dnuka

+0

非常感謝。遞歸調用之前添加return關鍵字解決了它。 – asritha

回答

0

您應該首先檢查mid是否等於鍵。如果確實如此,逃跑。

1
//ignores found value 
binarySearch(a,key,low,high); 

應該

//returns value 
return binarySearch(a,key,low,high); 

兩個「如果」和「否則,如果」條款

2

在遞歸調用調用者的執行被中斷,他的執行框架被壓入堆棧。當被調用者完成執行時,從堆棧中檢索調用者框架並繼續執行。你分配了9到中間,你回到中間沒有重新分配它。如果您嘗試使用不同大小的數組,您會看到始終返回初始中間值,並且所有遞歸調用均無緣無故。調試一個System.out.println(「returns」+ mid);在return語句前面。