面试题,实现一个方法,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]