微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

递归返回素数数组

如何解决递归返回素数数组

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。