2012-12-27 109 views
0

我寫了這個遞歸方法來查找整數數組中的整數,但它不起作用。我試着調試它,但我不知道問題會是什麼。找到整數數組中的整數元素:遞歸問題

下面的代碼

public static String inList(int[] primes,int a){ 
    int index = -9; 
    if(primes.length>1){ 
     index = primes.length/2; 
    }else{ 
     if(primes[0] == a){ 
      return "True"; 
     }else{ 
      return "False"; 
     } 
    } 
    if(primes[index] == a){ 
     return "True"; 
    } 
    if(primes[index] > a){ 
     inList(Arrays.copyOfRange(primes, 0, index),a); 
    } 
    if(primes[index]<a){ 
     inList(Arrays.copyOfRange(primes, index, primes.length),a); 
    } 
      //shouldn't even get to this point, but eclipse insisted I needed another return 
      //statement 
    return "Whyyyyy?"; 
} 
+0

「不起作用」是什麼意思?錯誤的結果?一個錯誤?另外,我認爲你的意思是返回遞歸調用的值。 (這就是Eclipse抱怨的原因。) – Ryan

+0

爲什麼一個名爲'inList'的函數返回一個'String'?它不應該在列表中,還是不在? – Ryan

+0

爲什麼你要返回'「True」而不是'true'? –

回答

2

您忘記了添加回報
您是否對數組進行排序?

if(primes[index] > a){ 
    return inList(Arrays.copyOfRange(primes, 0, index),a); 
} 
if(primes[index]<a){ 
    return inList(Arrays.copyOfRange(primes, index, primes.length),a); 
} 
+0

謝謝,我不知道我必須返回遞歸調用 – evthim

2

只需使用Arrays.binarySearch()。正如您將從其不同的原型中看到的那樣,當且僅當您在數組中查找的值不存在時,纔會返回負值。

1

遞歸函數找到的東西在一個數組是:

public static String inList(int[] primes,int index, int a) { 
    /* two breaking conditions for recursion: end of array or number found */ 
    if(index >= primes.length) 
     return "False"; 

    if(primes[index] == a) 
     return "True"; 

    /* recursion */ 
    return inList(primes, ++index, a); 
} 

您可以撥打上面的方法與index = 0前。 inList(primes, 0, a)。這將比非遞歸查找方法慢得多。

+0

原來的問題是要實現二分搜索,我想。 – Ryan