我需要帮助以满足以下引用的程序:
所有整数> = 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);
}
感谢任何帮助!
答案 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
提示:研究如何通过使用循环来删除尾递归,然后反转该过程。