【发布时间】:2013-03-31 07:20:04
【问题描述】:
我编写了一个简单的脚本,用于使用递归方法(欧几里得算法)查找最大公约数 (GCD) 和最小公倍数 (LCM)。
不幸的是,如果它需要在不止一个步骤中执行此操作,则要从函数返回的相关变量将变为未定义。我尝试在带有断点的调试器中跟踪它,它似乎充分遵循递归并适当地返回到原始函数,但它随后在函数末尾神秘地消失了,即使它是要返回的?
不知道为什么会发生这种情况或我能做些什么来解决它。我的代码如下:
function GCD(a, b) {
if (a % b == 0) {
return b;
}
else {
GCD(b, (a % b));
}
}
function LCM (a, b) {
return (a*b)/GCD(a, b);
}
function makeDM (a, b) {
return (GCD(a, b) + " " + LCM(a, b));
}
因此,如果您使用 a & b,例如 60、20,它会给出 20 和 60 的正确答案。但是,如果您使用诸如 20、60 或 126、35 之类的数字,它会非常失败。
【问题讨论】:
-
我把你的代码粘贴到ideone.com 中试试,它在第 2 行给了我警告:使用 '===' 与 0 进行比较。
-
GCD中的一个路径中没有return。这很可疑。 -
这是你想要做的 -> FIDDLE ??
-
您在 GCD 的最后一条语句中缺少
return -
谢谢大家!现在修复:)。我知道我错过了一些基本的东西。我猜是时候做更多的阅读了:D
标签: javascript function recursion