Javascript 递归返回素因子数组

Javascript 递归返回素因子数组,javascript,recursion,prime-factoring,Javascript,Recursion,Prime Factoring,这是我的密码。我试图将我的因子放入一个数组中,但我无法做到这一点,并且一直在做什么。我在console.log时得到的因子很好。任何帮助都将不胜感激 primer = (num, factor = 2,) => { const factors = [] if (num < 2) { return factors } if (num % factor == 0) { factors.push(factor)

这是我的密码。我试图将我的因子放入一个数组中,但我无法做到这一点,并且一直在做什么。我在console.log时得到的因子很好。任何帮助都将不胜感激

primer = (num, factor = 2,) => {
    const factors = []
    if (num < 2) {
        return factors
    }
    if (num % factor == 0) {
        factors.push(factor)
        console.log(factor)
        primer(num / factor, factor);
    }
    else {
        primer(num, factor + 1);
    }

}
primer=(num,factor=2,)=>{
常数因子=[]
if(num<2){
回报率
}
如果(num%因子==0){
因子。推(因子)
console.log(系数)
引物(数量/因子,因子);
}
否则{
引物(数量,因子+1);
}
}

问题在于,每次递归调用函数时,
factors=[]
是一个不同的数组。您需要确保将递归结果添加到当前结果中:

primer=(num,factor=2)=>{
常数因子=[];
if(num<2){
回报因素;
}
如果(num%因子==0){
推动因素;
因子。推送(…引物(数量/因子,因子,因子));
}
否则{
推送(…引物(数量,因子+1,因子));
}
返回因子;//记住要返回!
}
请注意,我们每次在上面递归时都会创建一个新数组,这并不理想。避免创建新数组的另一种方法是使用额外的
factors
数组参数,并确保附加到该参数:

primer=(num,factor=2,factors=[])=>{
if(num<2){
回报因素;
}
如果(num%因子==0){
推动因素;
引物(数量/因子,因子,因子);
}
否则{
引物(数量,因子+1,因子);
}
回报因素;
}

是什么让你认为你没有把
因子
推到数组中?您不返回数组,而且它是函数的本地数组,因此除非您返回它,否则它在函数外部不可用。而且,由于您以递归方式调用它,因此每次调用都会创建一个新数组,这进一步加剧了问题。噢,非常感谢!我当时不知道该怎么办,但现在我明白我做错了什么