递归返回素数数组

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;
}