将函数从迭代更改为递归?

时间:2009-02-09 20:30:52

标签: javascript recursion

projectEuler3(600851475143);

var projectEuler3 = function (composite) {
    var result = 2;
    while(composite > 1)
    {
        if (composite % result)
        {
            result++
        } else {
            composite = composite / result;
            console.log(result);
        }
    }
};

3 个答案:

答案 0 :(得分:2)

编辑:原来这个问题的目的是如何将算法(通常)从迭代更改为递归...而不是像我假设的那样,如何得到特定问题的答案。 /强>

这是项目欧拉!项目Euler纯粹是为了你自己的利益......如果你想让其他人为你做这项工作,你可能只是在谷歌的某个地方查找答案并输入。

我只能猜测你已经确定你的程序是正确的,但它太慢了,你希望加快它的速度。使函数递归无济于事。

该网站指出,如果您的计划无法快速解决问题,那么有更好的方法......尝试不同的策略。

答案 1 :(得分:2)

希望在项目Euler(边做边学)和SO(逐个学习)的精神中,这里有一个相当通用的模板,用于循环到尾调用递归:

var projectEuler3 = function(n) {
    var pE3_inner = function(n, i) {
        // magic happens here

        // if neither n nor i has changed, this is an
        // infinite recursion (and usually a stack overflow)
        pE3_inner(n, i);
    }

    pE3_inner(n, 2);
}

答案 2 :(得分:2)

Structure and Interpretation of Computer Programs介绍了迭代算法和递归算法之间的区别,如何识别哪个(在某些语言中它不是那么明显!),以及如何从一个转换为另一个。

除了是一本优秀的教科书外。