当前位置: 首页 > 知识库问答 >
问题:

一种Java递归方法,如果整数在数组中只存在一次,则返回true

谭高峯
2023-03-14

例如int[]arr={1,2,2,3,4,5};3只存在一次,方法应该返回true;2存在两次,方法应该返回false;0不存在,方法应该返回false。我不断得到一个运行时错误,我如何修复它,或者有没有任何方法到方法(仅递归)。下面是我的代码:

   public static boolean list(int [] a, int num) {
       return helper(a,0,num);
   }
   
   
   public static boolean helper(int [] a, int i, int num) {
       int count = 0;
       if(a[i] == num ) 
           count++;    
        if(count == 1 && i == a.length )
           return true;
        else if(count != 1 && i == a.length)
           return false;
       else 
           return helper(a, i++, num);   
       

   }
   
       

共有1个答案

郤望
2023-03-14

我运行了您的代码,得到了一个java.lang.StackOverflowError。这表明名为helper的递归方法一直在无限地调用自己。之所以这样做,是因为return语句之前的if语句中的条件都不为真。

当以下两个条件之一为真时,您不希望递归调用该方法:

  1. 数组中再次出现要搜索的数字。
  2. 您已到达数组的末尾。

如果您在每次调用方法helper时都将count初始化为零,那么它将永远不会大于1。因此,您应该使它成为helper方法的参数。

您只需检查i是否等于a.lengts以确定是否已到达数组的末尾。

/**
 * Determines whether 'num' occurs exactly once in 'a'.
 *
 * @param a     - array to search
 * @param count - number of occurrences of 'num' in 'a'
 * @param i     - index in 'a'
 * @param num   - number to search for
 *
 * @return 'true' if 'num' occurs exactly once in 'a', otherwise 'false'.
 */
public static boolean helper2(int[] a, int count, int i, int num) {
    if (count > 1) {
        return false;
    }
    if (i == a.length) {
        return count == 1;
    }
    if (a[i] == num) {
        count++;
    }
    return helper2(a, count, i + 1, num);
}

并且对该方法的初始调用是(例如,如果您正在检查数字3是否只在

int[] a = new int[]{1, 2, 2, 3, 4, 5}; // array of integers to search
int count = 0; // number of occurrences
int index = 0; // index in 'a'
int num = 3; // number to search for
boolean single = helper2(a, count, index, num);
 类似资料:
  • 我试图使用递归编写一个方法subsetWithSum(ArrayList numbers,int sum),该方法获取整数的ArrayList和整数的和,并返回一个ArrayList,其中包含给定数字(提供的ArrayList)中的数字,这些数字的和等于和。不必返回多个组合,如果没有这样的子集,则应返回null。但我的代码只为每个返回null`` 这是我的方法代码: 下面是我对该方法的主要调用:

  • 我试图解决这个问题:编写一个递归方法,返回作为int类型参数传递给它的整数中的位数。允许使用正参数和负参数。例如,-120有三个数字。 这是我的代码,但当我试图通过121时,我总是得到1:

  • 问题内容: 我在node.js中编写一个函数来查询PostgreSQL表。 如果该行存在,我想从该行返回id列。 如果不存在,我想将其插入并返回ID()。 我一直在尝试和语句的变体,但似乎无法使其正常工作。 问题答案: 我建议在数据库端进行检查,然后将ID返回给nodejs。 例子: 而不是在Node.js端(在此示例中,我使用的是node-postgres):

  • 问题内容: 我想将方法​​返回的数组存储到另一个数组中。我怎样才能做到这一点? 当我调用此方法时,如何将返回的数组(z)存储到另一个数组中? 问题答案: 上面的方法不返回数组本身,而是返回对该数组的引用。在调用函数中,您可以在另一个引用中收集此返回值,例如: 此后还将引用之前引用的同一数组。 如果这不是您想要的,并且要创建阵列的副本,则可以使用创建副本。

  • 我需要一个递归函数,首先返回最深的项,因为反转数组和推到第一个位置很慢。 我有一个目标: 和一个递归函数: 我需要一个递归函数,它可以返回一个对象父id的数组,这样最后一个父id就位于返回数组的第一位。对于上面的例子,如果我将该对象传入我的函数,它应该返回父对象的id,如下所示: