[英]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.