编程语言
首页 > 编程语言> > 我如何才能将此递归javascript输出输出到控制台以外的任何内容

我如何才能将此递归javascript输出输出到控制台以外的任何内容

作者:互联网

这是受欧拉计划(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];
}

请注意,我们不再需要isPrime或break,因为我们将尽早返回.当我们回到根源时,我们已经建立了一个包含我们发现的所有因素的数组.我将函数重命名为更好地反映它实际返回的内容,但这是个人喜好.

(顺便说一句,您不需要一直循环到n;可以保证永远不会在该循环内找到Math.sqrt(n)和n之间的因数.)

标签:factorization,javascript,recursion
来源: https://codeday.me/bug/20191120/2043336.html