递归返回素数数组
Returning array of prime factors with recursion
这是我的代码。我试图将我的因素推入一个数组,但我无法做到并且坚持要做什么。当我 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, factor, factors);
}
else {
primer(num, factor + 1, factors);
}
return factors;
}
这是我的代码。我试图将我的因素推入一个数组,但我无法做到并且坚持要做什么。当我 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, factor, factors);
}
else {
primer(num, factor + 1, factors);
}
return factors;
}