javascript - 我怎样才能将这个递归 javascript 输出到控制台以外的任何地方

标签 javascript recursion factorization

这是受到 Project Euler Q3 的启发。所以你们以前都见过。如果您还没有看到它,--> https://projecteuler.net/problem=3

我不是在解决问题之后。

递归对我来说还是很陌生。我将这段代码拼凑在一起,它给了我正确的解决方案(好吧,它给了我正确的因素),但是,我只能设法让它输出到控制台,而我想让它返回一个值某种可以在其他地方使用的类型,也许是某种类型或最大/最小类型的东西。我在想也许是一个包含因素的数组。不过就目前而言,我知道每当我在函数内部初始化一个数组时,它都会随着对该函数的每次递归调用而重新初始化。所以这没有用。

function primefy(n) {
    var isPrime = true;
    for (var i = 2; i < n; i++){
        if(n % i === 0){
            isPrime = false;
            console.log(i);
            primefy(n/i);
            break;
        }
    }
    if (isPrime){
        console.log(n);
    }
}

primefy(prompt("A number please?"));

如果我喂它 8 它将记录 2 2 2,18 产生 2 3 3 等等。数学似乎是正确的,但显然实现是错误的。

最佳答案

要从递归过程中返回一个值(而不是简单地沿途执行一些操作),函数的每个实例都需要返回一些东西直到调用它的实例(或者返回到原始调用者,如果它是根实例)。为此,它需要将其本地结果与其子级传递给它的结果相结合。

例如:

function primeFactors(n) {
    for (var i = 2; i < n; i++){
        if(n % i === 0){
            return [i].concat(primeFactors(n/i));
        }
    }
    return [n];
}

请注意,我们不再需要 isPrimebreak,因为我们将尽早返回。当我们回到根时,我们已经建立了一个包含我们找到的所有因素的数组。我已重命名该函数以更好地反射(reflect)它实际返回的内容,但这是个人品味。

(顺便说一句,您不需要一直循环到 n;您保证永远不会找到 Math.sqrt(n)n 在该循环内。)

关于javascript - 我怎样才能将这个递归 javascript 输出到控制台以外的任何地方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30112995/

相关文章:

javascript - 如何更改 Highstock 图表上的 UTC 时间戳?

javascript - 如何使用 POST 重定向时通过 onclick 和 POST 数据获取

javascript - 设置 app.route(/something/<argument>) 时/static/的位置更改为/something/static/

recursion - 我如何阻止(和加入)由未知数量的 goroutines 提供的 channel ?

Java:产生更大的随机数

c++ - 生成一个数的所有因数分解

javascript - 九谜游戏在瓷砖对齐上中断

java - 递归地从链表中删除节点

java - java中的递归函数不起作用

java - 查找整数的最小 "factorization"到平方数