我需要编写一个递归地将数字因素分解为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.");
}
+0
你如何开始这种方法?你能提供一些例子吗?你必须使用递归,因为这可以在没有递归的情况下完成。我建议你展示使用实际的代码,因为这仍然不会编译。 –
+0
我添加了它使用的部分,它也应该可以工作。它必须是递归的。 –
+0
尝试改为'isPrime(num1,(int)Math.sqrt(num1))'它将具有N^0.5而不是N的深度。如果您愿意,可以将'i'和'n/i'都打印出来需要两个。 –