递归返回素数数组

问题描述

这是我的代码。我试图将自己的因素推入一个数组,但是我无法坚持到底该怎么做。当我进行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;
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...