【问题标题】:How to recursively count number of occurences in an array如何递归计算数组中出现的次数
【发布时间】:2022-01-06 11:55:52
【问题描述】:

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

我真的很困惑,老实说我不知道​​该怎么做。我真的尽了最大的努力,但是我在这项任务上工作的时间越长,我理解的就越少。 任何帮助表示赞赏,并提前感谢您! :)

【问题讨论】:

标签: java recursion


【解决方案1】:

由于Recursive Counting in an Array 被关闭,我将在这里回答:

让我们分析一下你做了什么以及为什么会出错

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

【讨论】:

  • 哇哇哇..非常感谢您花时间帮助像我这样的初学者,您解释得很好,我终于明白了一切!再次谢谢你:)
【解决方案2】:

试试

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

使用示例:System.out.println(evenNumberOf(2, 0, new int[]{2,0,3,7,6,11,1,2}, 0));
(可以添加辅助方法evenNumberOf(int value,int[]arr)

【讨论】:

    【解决方案3】:

    分为两种方法:

    • 最初调用的方法
    • 以及一个递归调用以计算数组中ns 数量的方法:
    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.
    }
    

    【讨论】:

    • 您好,您能详细解释一下您的意思吗?我想我理解你的一般想法,但我真的不知道我怎么能做到这一点。我真的很抱歉听起来“愚蠢”,但我已经尝试了好几个小时了,但仍然无法理解这一点。
    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 2021-10-10
    • 2015-04-15
    • 2016-05-28
    • 2017-04-14
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多