我正在尝试编写一个递归方法,它接受一个int数组,数组中的元素数和一个整数,并返回整数是否作为数组中的元素存在。我只是无法弄清楚为什么我这不适用于我的所有测试用例。任何帮助将不胜感激!
public static boolean search(int[] findIn, int target, int len){
if(len == 0){
return false;
}else if(findIn[len-1] == target){
return true;
}else{
return search(findIn, target, len-1);
}
}
是的我意识到除了递归之外还有更好的方法来做到这一点,但我需要这样做。
我的主要方法如下:我只是暂时硬编码:
int[] arr = {1};
System.out.println(search(arr,1,1));
测试用例:
答案 0 :(得分:4)
我几乎可以肯定,你的方法参数顺序错误:
您的结果提示您切换了第2和第3个参数!
也许这个
static boolean search(int[] findIn, int target, int len)
实际应该是
static boolean search(int[] findIn, int len, int target)
答案 1 :(得分:0)
从我所看到的,该代码应该可以正常工作,所以我怀疑你的问题出在你的测试用例中,而不是在这里。
我要提到的一件事是使用if-return-else
结构会不必要地使代码复杂化。
public static boolean search(
int[] findIn, int target, int len)
{
if (len == 0)
return false;
if (findIn[len-1] == target)
return true;
return search(findIn, target, len-1);
}
我发现一眼就能比在任何特定时刻跟踪我碰巧遇到的if
条款更容易理解。
在任何情况下,它和你的版本都表现良好,至少对于小型测试用例。第一次传入一个1000万元素的数组时,可能是因为你发现它不是递归的最好的海报孩子。
答案 2 :(得分:0)
我试过这样的东西,它正在工作.. 我正在使用静态实例变量来查找数组中数字的位置。 您可以修改以返回布尔值
,而不是返回数字的位置public class RecSearch {
static int pos=0;
public static void main(String[] args) {
int a[] = {1};
System.out.println(recSearch(a, 0));
System.out.println(recSearch(a, 1));
}
public static int recursiveSearch(int[] arr, int numtoSearch) {
if (pos>=arr.length) {
pos=0;
return -1;
}
if (arr[pos]==numtoSearch)
return (pos+1);
else {
pos++;
return recursiveSearch(arr, numtoSearch);
}
}
}
答案 3 :(得分:0)
public class Solution {
public static boolean checkNumber(int input[], int x) {
return check(input,x,0);
}
public static boolean check(int input[],int x,int start){
if(start==input.length)
return false;
if(input[start]==x)
return true;
return check(input,x,start+1);
}
}