如何递归地解决程序

时间:2017-05-09 03:05:18

标签: java recursion prime-factoring

我需要帮助以满足以下引用的程序:

  

所有整数> = 2可以计算为仅素数的乘积   数字。例如,数字12具有素数分解   2 * 2 * 3,而数字100的素数分解为2 * 2 * 5 * 5。我们   有兴趣知道输入整数是否具有素数   只有2s和3s的分解。

我认为我需要更多基本条件并捕获所有递归调用。

当前(未完成)代码:

    public static boolean hasFactors2and3(int number) throws IllegalArgumentException{
        if (number < 2) throw new IllegalArgumentException("Number is less than 2");
        if (number >= 2 && number < 5) return true; // because for all these numbers it works
        if (number % 2 == 0) return hasFactors2and3(number /= 2);
        if (number % 3 == 0) return hasFactors2and3(number /= 3);

    }

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

你要求递归解决方案。我不会给你那个。相反,我会给你一个伪代码的非递归解决方案,并让你把它转换成一个递归的解决方案。

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

提示:研究如何通过使用循环来删除尾递归,然后反转该过程。