问题描述
这是我的代码。我试图将自己的因素推入一个数组,但是我无法坚持到底该怎么做。当我进行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);
}
}
解决方法
问题在于,每次递归调用函数时,factors = []
是一个不同的数组。您需要确保将递归结果添加到当前结果中:
primer = (num,factor = 2) => {
const factors = [];
if (num < 2) {
return factors;
}
if (num % factor == 0) {
factors.push(factor);
factors.push(...primer(num / factor,factor,factors));
}
else {
factors.push(...primer(num,factor + 1,factors));
}
return factors; // And remember to return!
}
请注意,每次上面递归时,我们都会创建一个新数组,这不是理想的选择。避免创建新数组的另一种方法是使用额外的factors
数组参数,并确保将其追加:
primer = (num,factor = 2,factors = []) => {
if (num < 2) {
return factors;
}
if (num % factor == 0) {
factors.push(factor);
primer(num / factor,factors);
}
else {
primer(num,factors);
}
return factors;
}