黑马程序员技术交流社区

标题: 递归思想求解答 [打印本页]

作者: 上善若水。V    时间: 2015-4-24 16:50
标题: 递归思想求解答
用递归实现分解质因数:如12=2*2*3?课后作业想了半天,求解答

作者: 优质码农    时间: 2015-4-24 16:50
public class Test {
        public static void main(String[] args) {
                List<Long> factors = getFactors(12L, 2);
                System.out.println(factors);
        }

        /**
         * 通过递归实现分解质因数
         * @param n 要分解的数字
         * @param factor 起始因子
         * @return 分解结果
         */
        public static List<Long> getFactors(long n, long factor) {
                // 不断增大 factor 直到能整除 n
                while (n % factor != 0 && factor < n) {
                        // 得到 2,3,5,7,9,11,13,...
                        factor = (factor < 2) ? 2 : ((factor == 2) ? 3 : (factor + 2));
                }
                List<Long> result;
                if (factor >= n) { // 因子已经涨到和 n 一样大,说明 n 本身就是因子。这时递归完成。
                        result = new ArrayList<Long>();
                } else { // 因子能够整除 n,于是继续分解除以因子后的结果
                        result = getFactors(n / factor, factor); // 向下递归
                }
                result.add(factor);
                return result;
用递归实现的,嘻嘻,求奖赏!
作者: 43453186@qq.com    时间: 2015-4-26 23:51
if (factor >= n) { // 因子已经涨到和 n 一样大,说明 n 本身就是因子。这时递归完成。
                        result = new ArrayList<Long>();
                }

不太明白,能解释一下么,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2