如何将此递归javascript输出到控制台以外的任何对象

如何将此递归javascript输出到控制台以外的任何对象,javascript,recursion,factorization,Javascript,Recursion,Factorization,这是受Project Euler Q3的启发。所以你们以前都见过。如果你还没有看到它,--> 我不想找到问题的答案 递归对我来说还是很新的。我拼凑了这段代码,它给了我正确的解决方案(好吧,它给了我正确的因子),但是,我只能设法让它输出到控制台,而我想让它返回某种类型的值,可以在其他地方使用,可能用于排序或最大/最小排序。我在想也许是一个包含了各种因素的数组。但现在,我知道,每当我初始化函数内部的数组时,它就会随着对函数的每次递归调用而重新初始化。所以这没有起作用 function primefy

这是受Project Euler Q3的启发。所以你们以前都见过。如果你还没有看到它,-->

我不想找到问题的答案

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

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?"));
函数primefy(n){
var isPrime=真;
对于(变量i=2;i

如果我喂它8,它将记录2,18产生2,3,依此类推。数学似乎是正确的,但显然实现是关闭的。

要从递归过程返回值(而不是简单地执行一些操作),函数的每个实例都需要向调用它的实例返回一些内容(或者向原始调用方返回,如果它是根实例)。要做到这一点,它需要将其本地结果与其子级传递给它的结果相结合

例如:

function primeFactors(n) {
    for (var i = 2; i < n; i++){
        if(n % i === 0){
            return [i].concat(primeFactors(n/i));
        }
    }
    return [n];
}
函数参数(n){
对于(变量i=2;i
请注意,我们不再需要
isPrime
break
,因为我们将尽早返回
。当我们回到根的时候,我们已经建立了一个包含我们发现的所有因素的数组。我已经重新命名了这个函数,以更好地反映它实际返回的内容,但这是个人喜好


(顺便说一句,你不需要一直循环到
n
;你保证永远不会在
Math.sqrt(n)
n
之间找到一个因子。)

@JaredFarrish将其作为答案发布。@JaredFarrish-带着解释谢谢你@S Mc Crohan。今天早上我对它进行了修改,至少可以得到一个嵌套数组来返回。但你的解决方案仍然更可爱。