我有一个简单的脚本,我写的是使用递归方法 - 欧几里德算法找到最大公约数(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));
}
所以,如果你使用& b如60,20会给出20和60的正确答案。但是如果你使用20,60或126,3等数字就会失败。
答案 0 :(得分:7)
您没有从函数的递归部分返回值,因此函数返回的值将为undefined
。添加return
:
function GCD(a, b) {
if (a % b == 0) {
return b;
}
else {
return GCD(b, (a % b));
}
}
你也可以用一个return
:
function GCD(a, b) {
return a % b == 0 ? b : GCD(b, (a % b));
}