[英]Creating recursive static method to find product of prime numbers in array
盡管 if(number % j == 0) 在 9/3 時返回 true 並且沒有余數但為 0,但數字 9 一直從我的 Prime 方法返回 true。有人願意幫助我嗎? 我也試圖不使用 for 循環。 這是為了家庭作業。
編輯:我已經嘗試了下面的答案,但我仍然使用 if 語句遇到同樣的問題。
public class test {
private static int product = 1;
private static int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
private static boolean allowmultiply;
public static void main(String args[]) {
System.out.println("Product: " + findproduct(array, 0));
}
public static int findproduct(int[] list, int i) {
int[] temp = list;
if(i <= temp.length-1) {
allowmultiply = Prime(temp[i], 2);
if(allowmultiply != false) {
product = product * temp[i];
}
i++;
return findproduct(temp, i);
}
return product;
}
public static boolean Prime(int number, int j) {
if(j <= number/j) {
if(number % j == 0) {
return false;
}
Prime(number, j+1);
}
return true;
}
}
新代碼:感謝 WJS 的幫助!
public class ProductPrimeNumber {
private static int product = 1;
private static boolean allowmultiply;
private static int checker = 0;
private static int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
public static void main(String args[]) {
System.out.println("Product: " + findproduct(array, 0));
}
public static int findproduct(int[] list, int i) {
int[] array = list;
if(i <= array.length-1) {
allowmultiply = isPrime(array[i], 2);
if(allowmultiply != false) {
product = product * array[i];
}
checker = 0;
i++;
return findproduct(array , i);
}
return product;
}
public static boolean isPrime(int number, int i) {
if(i < number) {
if(number % i == 0 && i != number) {
checker++;
}
isPrime(number, i+1);
}
if(checker > 0) {
return false;
}
return true;
}
}
這可能會有所幫助。 暫時忘掉素數,因為那是一個完全獨立的問題。 考慮偶數的乘積。 該方法並不像幫助清晰度那樣緊湊。
static Predicate<Integer> isEven = a -> a != 0 && a % 2 == 0;
int[] data = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int prod = findProduct(data, 0);
System.out.println("prod = " + prod);
印刷
prod = 3840
i == v.length-1
(最后一個元素)。v[i]
的偶校驗來"unwind"
遞歸調用prod * v[i]
。prod
。public static int findProduct(int[] v, int i) {
int prod = 1;
if (i < v.length-1) {
prod = findProduct(v, i+1);
}
if (isEven.test(v[i])) {
return prod * v[i];
}
return prod;
}
這個和主要解決方案之間的唯一區別是您的測試目的。 所以用isEven
替換isPrime
。 然后你只需要專注於你的isPrime
代碼。
更緊湊的findProduct
版本在這里。
i == i.length
時,返回1
開始展開過程public static int prodEven(int[] v, int i) {
if (i < v.length) {
return (isEven.test(v[i]) ? v[i] : 1) * prodEven(v, i+1);
}
return 1;
}
要通過遞歸完成,您可以從一個索引開始(比如 i 指向數組的開頭)。
基本條件:當i達到數組長度時,則返回1;
要做的工作:如果數字是素數,則將其乘以乘積和調用其他函數的返回值,如果不是,則將乘積乘以調用其他函數的返回值。
public class PrimeProduct {
static int product = 1;
public static void main(String[] args) {
int list[] = { 3, 5, 9, 11 }; // 11*5*3
int res = findProduct(list, 0);
System.out.println(res);
}
public static int findProduct(int[] list, int i) {
if (i == list.length) {
return 1;
}
return isPrime(list[i], 2) ? product * list[i] * findProduct(list, i + 1) : product * findProduct(list, i + 1);
}
private static boolean isPrime(int num, int i) {
if (i * i > num) {
return true;
}
return (num % i != 0) ? isPrime(num, i + 1) : false;
}
}
output 是
165
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.