Javascript 递归返回素因子数组
这是我的密码。我试图将我的因子放入一个数组中,但我无法做到这一点,并且一直在做什么。我在console.log时得到的因子很好。任何帮助都将不胜感激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)
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,因子);
}
回报因素;
}
是什么让你认为你没有把因子
推到数组中?您不返回数组,而且它是函数的本地数组,因此除非您返回它,否则它在函数外部不可用。而且,由于您以递归方式调用它,因此每次调用都会创建一个新数组,这进一步加剧了问题。噢,非常感谢!我当时不知道该怎么办,但现在我明白我做错了什么