编写递归方法来查找传入的数字的质因子
Posted
技术标签:
【中文标题】编写递归方法来查找传入的数字的质因子【英文标题】:Writing a recursive method to find the prime factors of a number that is passed in 【发布时间】:2020-12-02 21:39:30 【问题描述】:我必须编写一个递归方法来查找传入的数字的质因数。质因数应该以字符串形式返回,其中质因数用空格分隔,并从最小到最大排序,左对。如果传入的数字是素数,则应返回字符串“素数”。 我给程序以下输入
FindPrime p10 = new FindPrime(408);
我应该得到:2x2x2x3x17,但输出是:
2x2x2x3x4x4xprime number
这是我编写的程序
public class FindPrime
public int div = 2;
public FindPrime(int i)
System.out.println(i + " factorization:");
findPrime(i);
System.out.println();
public void findPrime(int num)
if(num == 1)
System.out.println("prime number");
return;
else if(num % div == 0)
System.out.print(div + "x");
findPrime(num/div);
else
div++;
System.out.print(div + "x");
findPrime(num/div);
有人可以帮忙吗?我不知道还能去哪里
【问题讨论】:
提示:在编写程序之前用英文写出你的算法。我无法判断您的算法是否正确,但您在实现中犯了错误,或者您认为的算法是否不正确。即使数字不能除以它(在最后一个else
块中),您也会打印出“div”;这不可能。
【参考方案1】:
那是因为:
首先,在else语句中,为什么要分?(findPrime(num/div);
)
其次,不知道if(num == 1)
是什么意思
所以应该是这样的:
public int div = 2;
public void FindPrime(int i)
System.out.println(i + " factorization:");
findPrime(i);
System.out.println();
public void findPrime(int num)
if(div == num) // it's the base case
System.out.print(div);
else if(num % div == 0)
System.out.print(div + "x");
findPrime(num/div);
else
div++;
//System.out.print(div + "x");// Why are you sure that it's going to divide?
findPrime(num);//you pass in the number, not divide then pass it in
【讨论】:
以上是关于编写递归方法来查找传入的数字的质因子的主要内容,如果未能解决你的问题,请参考以下文章