问题描述
|
我需要创建一个名为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;
}
解决方法
如果需要使用递归,则可以在每次递归上复制数组。这是无效的,但是与使用循环相比,使用递归效率低下。例如
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,array2.length);
return isMember(array2,value);
}
, 您的问题有点问题。如果要使用递归,则每个数组元素都需要有一个元素子集,否则您将传递给递归方法吗?如果不是casr,并且情况如您所述,那么使用递归解决此问题是不合适的。另外,您缺少值比较。
, 请参阅MSDN Array类。看起来是c#。也许尝试Array.Find<T
>方法。
更新:
对于Java,我建议您查看Arrays(Java 2平台):
binarySearch
公共静态int binarySearch(int []
一种,
整数键)
使用二进制搜索算法在指定的int数组中搜索指定的值。在进行此调用之前,必须对数组进行排序(如通过上述sort方法)。如果
它没有排序,结果是
未定义。如果数组包含
具有指定的多个元素
值,无法保证哪一个
将被发现。
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 [])
, 如果这是家庭作业,并且他们希望递归,那么也许您应该:
1查找数组的中间值,并检查其是否匹配。如果匹配,则返回true
2将函数应用于数组的前半部分。如果返回true,则返回true
3将功能应用到Aray的后半部分。如果返回true,则返回true
4返回假
没有代码,因为这是家庭作业。
编辑:数组有序吗?
, 我只是在做问题,并在其他方法中查看答案。当您必须将名称与字符串数组匹配时,这可能很有用。
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);
}
}
}