2012-12-27 75 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