Java递归,返回数组索引

时间:2015-05-06 23:21:36

标签: java recursion

在Java中,我想创建一个递归方法,在数组中查找特定的整数,当它找到它时,它返回数组索引。

到目前为止我的代码是:

private static int contains(int[] data, int value, int index) 
{
     if (index >data.length)
     {
         return 0;
     }
     if(data[index] == value)
     { 
         return index;
     }
     else
     {
         return contains(data,value,index);
     }
}   

该方法不返回正确的索引。我做错了什么?

3 个答案:

答案 0 :(得分:3)

首先,find dir -name '*.js'是一个有效的索引,是数组中的第一个索引。如果您已在基本情况下离开数组末尾,请返回0以表示"未找到"。此外,当-1到达index时,您已离开数组的末尾,而不是在data.length已过时,因此您需要更改data.length条件这里。

其次,递归调用会发送相同的参数,如果在初始递归调用中找不到if,则会导致无限循环。您希望在下一个递归调用中查看下一个索引,因此在再次调用value时,请传递index + 1而不是index

答案 1 :(得分:0)

好吧,当你想做一个递归方法时,你需要两件事:

  1. 一个基本案例 (在您的方法中,这是index == data.lengthindex == value)。

  2. 如果实际调用中的值不是基本情况,则为递归调用。

  3. 然后在您的方法中,您必须使用正在递增或递减的变量的新值为您的方法执行新调用 在您的情况下,此变量为index

    嗯,有了这一切,你必须考虑:

    1. 如果我从基础案例开始,我的方法效果很好吗?
    2. 如果我从没有基本情况开始,那么连续的调用会转到基本情况吗?
    3. 您的代码将是这样的:

             private static int contains(int[] data, int value, int index){
      
       if(index == data.length) {
            return -1;
        }else if (data[index] == value){
            return index;
         }else{
            return contains(data,value,index+1);
                }
          }   
      

答案 2 :(得分:0)

在递归中,您将问题划分为较小的类似问题,直到您达到方法/功能不再需要调用自身的程度。在我的 contains 版本中,如下所示,每次调用该方法时,它都会检查它是否超过了数组的末尾("在&#34之前;第一个元素)或者已发现。如果不是,则该方法调用自身以查找结果。如果找不到元素,该方法返回 -1 - 这可能是一个合适的选择,因为没有数组元素在索引-1处。此外,应该使用 data - 1 的长度作为第三个参数调用该方法。

private static int contains( int[] data, int value, int index )
{
    /* Base cases - end of recursion: */
    if ( ( index == -1 ) || ( data[ index ] == value ) )
    {
        return index;
    }

    /* Recursion: */
    return contains( data, value, index - 1 );
}