2014-02-27 109 views
1

我必須實現二進制搜索方法,它發現值是否在數組中。我必須使用遞歸。Java二進制搜索遞歸

public static boolean searchBin(int[] array, int x, int l, int r) { 

     int center; 

     center =(l+r)/2; 
     if (x > array[center]) 
     { 
      l = center+1; 
     } 
     else 
     { 
      r = center-1; 
     } 

     if (array[center] == x) 
     { 
      return true; 
     } 
     else 
     { 
      if (l<=r) 
      { 
       searchBin(array,x,l,r); 
      } 
      else 
      { 
       return false; 
      } 
     } 
    } 

,我發現了以下錯誤:

Missing return statement

感謝。

+0

遞歸調用,因爲存在你什麼都不返回的路徑。但該方法應該'返回'的東西.. – Maroun

+1

不應該是'return searchBin(array,x,l,r); '? –

回答

2

這是因爲執行的可能路徑之一可能導致不關你return語句的:在過去的if,如果條件l<=rtrue,什麼都不會返回(你只遞歸調用你的方法)。

您可能希望在遞歸調用之前添加return關鍵字:

return searchBin(array,x,l,r); 

這樣,你的方法(在這種情況下)的回報無論遞歸調用返回。

2

這是因爲錯誤提示「並非所有路徑都返回值」。

這是可能出現的問題:

searchBin(array,x,l,r); 

一個修復程序將是:

return searchBin(array,x,l,r); 
1

沒有回報,你必須

searchBin