Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何递归求解程序_Java_Recursion_Prime Factoring - Fatal编程技术网

Java 如何递归求解程序

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

我需要一个满足以下报价的程序的帮助:

所有大于等于2的整数只能分解为素数的乘积 数字。例如,数字12的素数分解为 2*2*3,而数字100的素数分解为2*2*5*5。我们 有兴趣知道输入整数是否有素数 只有2和3的因式分解

我想我需要更多的基本条件和一个全面的递归调用

当前(未完成)代码:

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