A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

上善若水。V

初级黑马

  • 黑马币:12

  • 帖子:9

  • 精华:0

© 上善若水。V 初级黑马   /  2015-4-24 16:50  /  2449 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

7黑马币
用递归实现分解质因数:如12=2*2*3?课后作业想了半天,求解答

最佳答案

查看完整内容

public class Test { public static void main(String[] args) { List factors = getFactors(12L, 2); System.out.println(factors); } /** * 通过递归实现分解质因数 * @param n 要分解的数字 * @param factor 起始因子 * @return 分解结果 */ public static List getFactors(long n, long factor) { // 不断增大 factor 直到能整除 n while (n % factor != 0 && factor < n) { // 得到 2,3,5,7,9,11,1 ...

2 个回复

倒序浏览
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;
用递归实现的,嘻嘻,求奖赏!
回复 使用道具 举报
if (factor >= n) { // 因子已经涨到和 n 一样大,说明 n 本身就是因子。这时递归完成。
                        result = new ArrayList<Long>();
                }

不太明白,能解释一下么,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马