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

如何递归计算数组中出现的次数

单于海荣
2023-03-14

我有一个任务,它获取一个int值“n”和一个Int Array作为参数,并且应该返回一个布尔值。该方法应该确定给定数组中有多少个“n”。如果数字是偶数,则方法应该返回true,否则返回false。如果数组的长度为0,它也应该返回“false”。

我设法做到的是:

public static boolean evenNumberOf(int n, int[] arr) {
    boolean result = false;
    System.out.println("Starting count");
    if (n < arr.length) {
        if (arr[n] == n) {
            result = true;
        } else {
            return evenNumberOf(n - 1, arr);
        }
    }
    return result;
}

老实说,我真的很困惑,我不知道该怎么办。我真的已经尽力了,但是我在这项任务上工作的时间越长,我就越不理解。感谢任何帮助,并提前感谢您!:)

共有3个答案

景建业
2023-03-14

由于数组中的递归计数作为重复项被关闭,我将在这里回答它:

让我们分析一下你做了什么,为什么是错的

public static int countN(int n,int [] arr,int i, int count) {
    
    if (arr[i] == n) {
        System.out.println("MATCH");
        count++;
        return count;
    } 

这里,当你得到一个匹配时,你已经返回了计数。你不应该这样做,因为如果第一个数字已经相同,它返回1。你需要做的就是增加这里的计数

    else {
        System.out.println("Moving on");
        i = i + 1;
        countN(n,arr,i, count);
        }

这里你做递归。这很好。但这也需要在你找到匹配的情况下完成。它需要返回那个值。但是,也只有当您还没有到达数组末尾时,才需要这样做

    if (arr.length == i) {
        evenNumberOf(n,arr);
    }

这一部分没有意义,因为您调用evenNumberOf时使用的参数与开始时完全相同,所以这将导致无限循环。你应该在这儿归还计数。还要记住,数组的最后一个索引的长度是- 1

把这些放在一起,你可以:

public static int countN(int n,int [] arr,int i, int count) {
    if (arr[i] == n) {
        count++;
    }
    if (arr.length - 1 == i) {
        return count;
    }
    return countN(n, arr, i + 1, count);
}   
常明亮
2023-03-14

尝试

    //arr should not be empty, index and count >= 0
    public static boolean evenNumberOf(int value, int index,int[]arr, int count) {
        if(index >= arr.length) return count%2 == 0;
        if(arr[index] == value ) {
            count++;
        }
        return evenNumberOf(value, ++index, arr, count);
    }

使用示例:< code > system . out . println(even number of(2,0,new int[]{2,0,3,7,6,11,1,2},0));
(您可以添加一个帮助器方法< code>evenNumberOf(int value,int[]arr))

党浩阔
2023-03-14

把它分成两种方法:

    < li >您最初调用的方法 < li >以及一个递归调用以计算数组中< code>n的个数的方法:
boolean evenNumberOf(int n, int[] arr) {
  int count = countNs(n, arr, 0);
  // Logic to choose what to return based on count and/or length of arr.
}

int countNs(int n, int[] arr, int i) {
  // Check if arr[i] is equal to n.

  // Make a recursive call to countNs for i := i + 1.

  // Combine the check/recursive call result to return a value.
}
 类似资料:
  • 问题内容: 我已经看到了一些这样的示例,但是所有这些似乎都依赖于知道要计算发生次数的元素。我的数组是动态生成的,所以我无法知道要计算哪个元素的出现(我想计算所有元素的出现)。有人可以建议吗? 提前致谢 编辑: 也许我应该更清楚一点,数组将包含多个不同的字符串(例如 在不知道它们是什么的情况下,如何计算foo,bar和foobar的出现? 问题答案: Swift 3和Swift 2: 您可以使用类型

  • 我需要使用这个方法: 然后使用递归计算存储在数组中的最大数、负数的计数以及正数的和。因此,您将在Assignment9类中创建递归方法findMax、countNegative和ComputeSum积极,它们将由main方法调用。 具体来说,必须实现以下递归方法(这些方法不应包含任何循环): 在数组中 如果我能算出这个负的,我就能算出计算的正的。 计数可以是你需要的任何东西。我把它更多地用作Fin

  • 我正在编写一个递归函数,它以一个整数作为输入,它将返回123出现在整数中的次数。 例如: 打印(onetwothree(123123999123)) 将打印出3,因为序列123在我输入函数的数字中出现了3次。 以下是我到目前为止的代码: 这将继续打印“0”。

  • 我已经被设置了一个任务,这意味着我需要创建一个'3个或更多的骰子游戏‘。我所坚持的是这个游戏所需要的计分系统,它是这样的:“玩家依次掷出所有五个骰子,并为同类中的三个或更好的骰子得分。如果玩家只有同类中的两个,他们可能会重新掷出剩余的骰子,试图提高匹配的骰子值。如果没有匹配的数字被掷出,玩家得分为0。 游戏进行了一定数量的回合(比如50回合),游戏结束时总分最高的玩家是获胜者。“我需要计算出如何将

  • 我已经将代码中的read整数修复为不再是I而是一个单独的变量“index”,并理解为什么我会收到Over Ofbound异常,但我有点厚,不明白如何在添加哨兵值0的同时修复它。

  • 问题内容: 我有一个数组如下 预期结果 尝试如下 问题答案: 无需使用jQuery即可完成此任务-此示例将构建一个对象,其中包含数组中每个不同元素的出现次数