簡體   English   中英

如何遞歸計算數組中出現的次數

[英]How to recursively count number of occurences in an array

我有一個任務,它獲取一個 int 值“n”和一個 Int 數組作為參數,並且應該返回一個 boolean。 該方法應該確定給定數組中有多少“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;
}

我真的很困惑,老實說我不知道該怎么做。 我真的盡了最大的努力,但是我在這項任務上工作的時間越長,我理解的就越少。 任何幫助表示贊賞,並提前感謝您::)

將其分為兩種方法:

  • 您最初調用的方法
  • 以及遞歸調用以計算數組中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.
}

嘗試

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

由於數組中的遞歸計數作為重復項而關閉,我將在這里回答:

讓我們分析一下你做了什么以及為什么它是錯誤的

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

這部分沒有意義,因為您使用與啟動時完全相同的 arguments 調用 evenNumberOf ,因此它將導致無限循環。 你應該在這里返回計數。 還要記住,數組的最后一個索引是 length - 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);
}   

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM