projectEuler3(600851475143);
var projectEuler3 = function (composite) {
var result = 2;
while(composite > 1)
{
if (composite % result)
{
result++
} else {
composite = composite / result;
console.log(result);
}
}
};
答案 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介绍了迭代算法和递归算法之间的区别,如何识别哪个(在某些语言中它不是那么明显!),以及如何从一个转换为另一个。
除了是一本优秀的教科书外。