1234567890 までの数値を再帰的に因数分解するメソッドを作成する必要があります。現在のアプリケーションは、StackOverflowError をスローする前に小さな数値でのみ動作します。再帰呼び出しが多すぎることが問題であることは理解していますが、呼び出しの数を減らす方法がわかりません。
再帰的である必要があります。
解決策は、アルゴリズムの背後にある数学に関連していると思います。私はさまざまな反復ソリューションを見てきましたが、少ない呼び出しで再帰的に実行することに頭を悩ませているようには見えません。コード:
public static boolean isPrime(int input, int i) {
if (i <= 2) {
return true;
}
if (input % i != 0) {
return isPrime(input, i-1);
} else {
factors(input, i);
return false;
}
}
public static void factors(int input, int i) {
if (i <= 1) {
System.out.printf(" %d", 1);
} else {
if (input % i == 0) {
System.out.printf(" %d", i);
}
factors(input, i - 1);
}
}
によって開始されます。
System.out.println("What integer would you like to factor?");
num1 = scan.nextInt();
if(isPrime(num1, num1 - 1)){
System.out.println("Input is a prime number");
} else {
System.out.println(" factors\nInput isn't a prime number.");
}