【问题标题】:Java: Recursively search an array for an integer given an array, integer, and array lengthJava:递归地在数组中搜索给定数组、整数和数组长度的整数
【发布时间】:2014-11-28 21:06:38
【问题描述】:

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

测试用例:

【问题讨论】:

  • 针对哪些测试用例?
  • 数组长度不需要参数。如果你有数组,那么你就有了它的长度。
  • 乍一看似乎是正确的。失败的测试用例是什么?
  • @Takendarkk 如果没有第三个参数,你将如何递归?
  • 我刚刚对其进行了测试,它返回了预期的结果(真)。这里没有问题。

标签: java arrays recursion


【解决方案1】:

我几乎可以肯定,您的方法参数顺序错误:

您的结果提示您切换了第二个和第三个参数!

也许是这样

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

应该是

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

【讨论】:

  • 你是对的,它似乎解释了所有的测试用例。不错!
  • 嗨,@luuksen,我做出了改进,但它似乎仍然给了我相同的结果。
  • 嘿!当您的方法调用没有更改时,此方法签名肯定不会返回相同的结果。 (或您的测试应用程序的那些)
【解决方案2】:

据我所见,该代码应该可以正常工作,因此我怀疑您的问题出在测试用例上,而不是在这里。

我要提到的一件事是,使用 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 子句要容易得多。

无论如何,它和您的版本都表现良好,至少对于小型测试用例。当你第一次传入一个一千万元素的数组时,你可能会发现它不是递归的最佳典型子。

【讨论】:

    【解决方案3】:

    我试过这样的东西,它正在工作.. 我正在使用静态实例变量来查找数组中数字的位置。 您可以修改为返回布尔值,而不是返回数字的位置

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

    【讨论】:

      【解决方案4】:
      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);
          }
          
      }
      

      【讨论】:

      • 在Java中使用递归检查数组中的数字
      猜你喜欢
      • 2013-12-13
      • 1970-01-01
      • 2015-06-21
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多