Java递归查找素数因子';行不通
我试图得到一个数的所有素数因子。Java递归查找素数因子';行不通,java,recursion,Java,Recursion,我试图得到一个数的所有素数因子。for循环应该一直工作,直到找到匹配项,它应该中断并跳转到下一个if语句,该语句检查数字是否不等于零 public class Factor { public static ArrayList <Integer> HoldNum = new ArrayList(); public static void main(String[]args){ Factor object = new Factor();
for
循环应该一直工作,直到找到匹配项,它应该中断并跳转到下一个if
语句,该语句检查数字是否不等于零
public class Factor {
public static ArrayList <Integer> HoldNum = new ArrayList();
public static void main(String[]args){
Factor object = new Factor();
object.Factor(104);
System.out.println(HoldNum.get(0));
}
public static int Factor(int number){
int new_numb = 0;
int n=0;
for( n = 1; n < 9; n++) {
if (number % n == 0) {
HoldNum.add(n);
new_numb = number/n;
break;
}
}
System.out.println(new_numb);
if(new_numb < 0) {
HoldNum.add(new_numb);
return 1;
} else {
return Factor(new_numb);
}
}
}
公共类因素{
public static ArrayList HoldNum=new ArrayList();
公共静态void main(字符串[]args){
因子对象=新因子();
客观因素(104);
System.out.println(HoldNum.get(0));
}
公共静态整数因子(整数){
int new_numb=0;
int n=0;
对于(n=1;n<9;n++){
如果(编号%n==0){
添加(n);
新编号=编号/n;
打破
}
}
系统输出打印LN(新编号);
如果(新的编号<0){
HoldNum.add(new_numb);
返回1;
}否则{
返回系数(新值);
}
}
}
您要求递归解决方案。给你:
public class Example {
public static void main(String[] args) {
System.out.println(factors(104));
}
public static List<Integer> factors(int number) {
return factors(number, new ArrayList<Integer>());
}
private static List<Integer> factors(int number, List<Integer> primes) {
for (int prim = 2; prim <= number; prim++) {
if (number % prim == 0) {
primes.add(prim);
return factors(number / prim, primes);
}
}
return primes;
}
}
公共类示例{
公共静态void main(字符串[]args){
系统输出打印项数(因子(104));
}
公共静态列表因子(整数){
返回因子(number,new ArrayList());
}
私有静态列表因子(整数、列表素数){
对于(int prim=2;prim至少有三个错误:
- 正如okiharaherbst所写,您的计数器不会递增
- 循环从1开始,因此您的val%1始终等于0,new_numb始终等于您的输入val,因此您将无休止地在104上循环
- new_numb永远不会小于0
Java实现
public class PrimeFactor {
public int divisor=2;
void printPrimeFactors(int num)
{
if(num == 1)
return;
if(num%divisor!=0)
{
while(num%divisor!=0)
++divisor;
}
if(num%divisor==0){
System.out.println(divisor);
printPrimeFactors(num/divisor);
}
}
public static void main(String[] args)
{
PrimeFactor obj = new PrimeFactor();
obj.printPrimeFactors(90);
}
}
您尚未说明您当前面临的问题。您需要告诉我们发生了什么?(通常,向其他人解释问题会让您自己找到解决方案。)for循环可变变量没有增加。问题是它将创建一个不定式循环。我的逻辑是,for循环将一直工作,直到它找到一个合适的值,该值可以与int number等分,然后合适的值将存储在Arraylist Holdnum中。如果合适,break语句应停止for循环able值为find,之后程序应检查remainin值是否小于0,如果不小于0,则应返回具有新值的因子