2

我编写了一个简单的脚本,用于使用递归方法 - Euclid 算法找到最大公约数 (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));
}

因此,如果您使用诸如 60、20 之类的 a 和 b,它将给出 20 和 60 的正确答案。但是,如果您使用诸如 20、60 或 126、35 之类的数字,则它会惨遭失败。

4

1 回答 1

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));
}
于 2013-03-31T07:32:12.273 回答