在递归javascript函数中变量是否未定义?

Tom*_*cat 2 javascript recursion function

我有一个简单的脚本,我写的是使用递归方法 - 欧几里德算法找到最大公约数(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));
}
Run Code Online (Sandbox Code Playgroud)

因此,如果你使用诸如60,20之类的&b,它将给出20和60的正确答案.但是如果你使用诸如20,60或126,35这样的数字,它就会失败.

Guf*_*ffa 7

您没有从函数的递归部分返回值,因此函数返回的值将是undefined.添加一个return:

function GCD(a, b) {
    if (a % b == 0) {
        return b;
    }
    else {
        return GCD(b, (a % b));
    }
}
Run Code Online (Sandbox Code Playgroud)

你也可以写一个return:

function GCD(a, b) {
    return a % b == 0 ? b : GCD(b, (a % b));
}
Run Code Online (Sandbox Code Playgroud)