只有两个参数的递归isMember方法!

时间:2011-06-11 11:46:50

标签: java arrays recursion boolean

我需要创建一个名为isMemeber的递归布尔方法。该方法只应接受两个参数:数组和值。如果在数组中找到该值,则该方法应返回true;如果在数组中未找到该值,则返回false。

我认为基本情况是如果传递的数组为空,但我需要有关递归情况的帮助:

public static boolean isMember(int[] array, int value)
{
    if(array.length==0){
        return false; 
    }else{
        return isMember(???);           
    }
}

以下是位置变量的外观:

public static boolean isMember(int[] array, int value, int position)
{
    if (position > -1)
    {

        if (array[position] == value)
        {
            return true;
        }
        else
        {
            return isMember(array, value, position - 1);
        }
    }
    return false;

}

5 个答案:

答案 0 :(得分:2)

如果需要使用递归,可以在每次递归时复制数组。这是无效的,但与使用循环相比,使用递归是低效的。例如Arrays.indexOf()

public static boolean isMember(int[] array, int value) {
    if(array.length == 0) return false; 
    if(array[0] == value) return true;
    int[] array2 = new int[array.length-1];
    System.arraycopy(array,1,array2,0,array2.length);
    return isMember(array2, value);           
}

答案 1 :(得分:0)

请参阅MSDN Array class。这看起来像是c#。也许试试Array.Find<T&gt;方法

<强>更新
对于Java,我建议查看Arrays (Java 2 Platform)

的binarySearch

  

public static int binarySearch(int []   一个,                                  int key)

     

使用二进制搜索算法在指定的int数组中搜索指定的值。在进行此调用之前,必须对数组进行排序(如上面的排序方法)。如果   它没有排序,结果是   未定义。如果数组包含   具有指定的多个元素   价值,无法保证哪一个   将被发现。

Parameters:
    a - the array to be searched.
    key - the value to be searched for. 
Returns:
    index of the search key, if it is contained in the list; otherwise,> (-(insertion point) - 1). 
     

插入点定义为键将插入列表的点:第一个元素的索引大于键,或list.size(),如果所有元素   列表中的小于指定的键。请注意,当且仅当找到密钥时,这才能保证返回值>> 0。另请参见:sort(int [])

答案 2 :(得分:0)

您的问题存在轻微问题。如果你打算使用递归,那么每个数组元素都需要有一个子元素,否则你会传递给递归方法吗?如果这不是casr,并且案例如您所述,那么用递归解决这个问题是不合适的。你也错过了价值比较。

答案 3 :(得分:0)

如果这是家庭作业并且他们想要递归,那么也许你应该:

1查找数组的中间值并检查它是否匹配。如果匹配,则返回true

2将函数应用于数组的前半部分。如果返回true,则返回true

3将该功能应用于aray的后半部分。如果返回true,则返回true

4返回false

没有代码,因为它是家庭作业。


编辑:阵列是否已订购?

答案 4 :(得分:0)

我只是在做问题,并检查替代方法的答案。当你必须将名称与String数组匹配时,这可能会有用。

public class Recursion {

    public static void main(String[] args) {
        String[] array = {"Tom", "Mary"};
        if(isMember(array,"John"))
            System.out.print("Found!");
        else
            System.out.println("Not Found!");

    }

    public static boolean isMember(String[] array, String name)
    {   
        int i = array.length;
        if(array.length == 0)
            return false;
        if(array[i - 1].equals(name))
            return true;
        else
        {
            String[] array2 = new String[array.length - 1];
            for(int b = 0; b< array.length -1; b++)
            {
                array2[b] = array[b];
            }
            return isMember(array2, name);
        }
    }
}