Javascript 拆解合数算法

面试题,实现一个方法,fn(num)接收一个数字参数,要求输出数字数组,数组内数字的乘积等于传入的参数,要求输出数组长度越长越好。

fn(6) 输出[2,3]
fn(8) [2,2,2]
fn(15) [3,5]

    function dismant(num,arr=[]){
        //所有因数都从2开始
        let i = 2
        //如果num是1、2、3没有因数直接返回
        if(num === 1 || num === 2 || num === 3){
            arr.push(num)
            return arr
        }
        //这个是核心:如果num从2开始找因数 一直找到自己的一半还没找到那么就证明它没有因数了。
        for(i; i < num/2 ; i++){
            if(num % i === 0){
                //存储最小的因数
                arr.push(i)
                //除以因数后 递归执行
                return dismant(num/i,arr)
            }
        }
        // 最后num既不是123,又找不到因数
        arr.push(num)
        return arr
    }

    console.log(dismant(155)) //[5,31]

你可能感兴趣的:(Javascript 拆解合数算法)