我需要创建一个名为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;
}
答案 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);
}
}
}