我需要編寫一個遞歸地將數字因素分解爲1234567890的方法,我的當前應用程序在拋出StackOverflowError之前只能處理很小的數字。我知道我的問題是遞歸調用太多,但我無法弄清楚如何減少我的電話數量。遞歸與Java的因式分解處理StackOverflow
它需要遞歸。
我在想這個解決方案與算法背後的數學有關。我看過不同的迭代解決方案,我似乎無法用少量調用遞歸地執行它。代碼:
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.");
}
你如何開始這種方法?你能提供一些例子嗎?你必須使用遞歸,因爲這可以在沒有遞歸的情況下完成。我建議你展示使用實際的代碼,因爲這仍然不會編譯。 –
我添加了它使用的部分,它也應該可以工作。它必須是遞歸的。 – user2272115
嘗試改爲'isPrime(num1,(int)Math.sqrt(num1))'它將具有N^0.5而不是N的深度。如果您願意,可以將'i'和'n/i'都打印出來需要兩個。 –