Java 如何递归求解程序
我需要一个满足以下报价的程序的帮助: 所有大于等于2的整数只能分解为素数的乘积 数字。例如,数字12的素数分解为 2*2*3,而数字100的素数分解为2*2*5*5。我们 有兴趣知道输入整数是否有素数 只有2和3的因式分解 我想我需要更多的基本条件和一个全面的递归调用 当前(未完成)代码:Java 如何递归求解程序,java,recursion,prime-factoring,Java,Recursion,Prime Factoring,我需要一个满足以下报价的程序的帮助: 所有大于等于2的整数只能分解为素数的乘积 数字。例如,数字12的素数分解为 2*2*3,而数字100的素数分解为2*2*5*5。我们 有兴趣知道输入整数是否有素数 只有2和3的因式分解 我想我需要更多的基本条件和一个全面的递归调用 当前(未完成)代码: public静态布尔hasfactors2和3(整数)抛出IllegalArgumentException{ 如果(数字=2&&number
public静态布尔hasfactors2和3(整数)抛出IllegalArgumentException{
如果(数字<2)抛出新的IllegalArgumentException(“数字小于2”);
如果(number>=2&&number<5)返回true;//因为对于所有这些数字它都有效
if(number%2==0)返回hasfactors2和3(number/=2);
if(number%3==0)返回hasfactors2和3(number/=3);
}
感谢您的帮助 您要求递归解决方案。我不会给你的。相反,我将给您一个伪代码的非递归解决方案,并让您将其转换为递归解决方案
function hasFactors2and3(number)
// Deal with negatives, 0, 1.
if (number < 2)
return false
endif
// Remove factors of 2.
while (number MOD 2 == 0)
number <- number / 2
endwhile
// Remove factors of 3.
while (number MOD 3 == 0)
number <- number / 3
endwhile
// See what factors are left after removing all 2s and 3s.
return number == 1
end function
函数有系数2和3(数字)
//处理否定,0,1。
如果(数字<2)
返回错误
恩迪夫
//去掉2的因子。
while(数模2==0)
对不起,StackOverflow不是代码编写或作业完成服务。请访问并阅读以了解如何有效使用此网站。这并不是在所有情况下都返回值。如果数字通过所有if
语句,它应该返回什么值?你能想出一个数字吗?以牺牲速度为代价,我建议将这个数字分解成一个因子的列表
,然后检查列表
是否有2或3以外的值。IMHO的优点是,它具有更好的错误检查能力,以及更好的未来证明能力(即,易于添加新的因子测试,以查看是否存在5)。换句话说,在因式分解中要更一般一些,并分别应用测试逻辑。递归是通过解决同一问题的较小版本来解决问题。在这种情况下,问题的较小版本将出现在number/2
或number/3
上。这是我认为您应该得到的最大提示。您的代码看起来很好,但正如您所说的,不完整。当你到达它的底部时,你知道number
至少是5,并且2和3都不能除以它。你能想出如何处理这样的数字吗?
function hasFactors2and3(number)
// Deal with negatives, 0, 1.
if (number < 2)
return false
endif
// Remove factors of 2.
while (number MOD 2 == 0)
number <- number / 2
endwhile
// Remove factors of 3.
while (number MOD 3 == 0)
number <- number / 3
endwhile
// See what factors are left after removing all 2s and 3s.
return number == 1
end function