Java:递归地在数组中搜索给定数组,整数和数组长度的整数

时间:2014-11-28 21:06:38

标签: java arrays recursion

我正在尝试编写一个递归方法,它接受一个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));

测试用例: enter image description here

4 个答案:

答案 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);
    }
    
}