Java:在给定数组、整数和数组长度的情况下,递归搜索数组中的整数

pjngdqdw  于 2023-01-01  发布在  Java
关注(0)|答案(4)|浏览(130)

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

测试用例:x1c 0d1x

zf2sa74q

zf2sa74q1#

我几乎可以肯定,您的方法参数顺序不对:
您的结果提示您交换了第二个和第三个参数!
也许这个

static boolean search(int[] findIn, int target, int len)

应该是

static boolean search(int[] findIn, int len, int target)
mrwjdhj3

mrwjdhj32#

从我所看到的,代码应该工作正常,所以我怀疑你的问题出在你的测试用例,而不是这里。
我要提到的一件事是,使用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万元素的数组时,你可能会发现它并不是递归的“最佳”典范。

mtb9vblg

mtb9vblg3#

我尝试了类似的方法,它很有效。我使用一个静态示例变量来查找number在数组中的位置。您可以修改返回一个布尔值来代替返回number的位置

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

    }

}
o7jaxewo

o7jaxewo4#

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

相关问题