Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
变量在递归javascript函数中变得未定义?_Javascript_Function_Recursion - Fatal编程技术网

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

变量在递归javascript函数中变得未定义?,javascript,function,recursion,Javascript,Function,Recursion,我已经编写了一个简单的脚本,使用递归方法——欧几里德算法来查找最大公约数(GCD)和最小公倍数(LCM) 不幸的是,如果需要在多个步骤中执行此操作,则从函数返回的相关变量将变得未定义。我曾尝试在带有断点的调试器中跟踪它,它似乎充分遵循递归并适当地返回到原始函数,但它在函数末尾神秘地消失了,即使它是要返回的 不知道为什么会发生这种情况,或者我能做些什么来修复它。我的代码如下: function GCD(a, b) { if (a % b == 0) { return b;

我已经编写了一个简单的脚本,使用递归方法——欧几里德算法来查找最大公约数(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,则会失败得很惨。

您没有从函数的递归部分返回值,因此从函数返回的值将
未定义。添加一个
返回值

function GCD(a, b) {
    if (a % b == 0) {
        return b;
    }
    else {
        return GCD(b, (a % b));
    }
}
function GCD(a, b) {
    return a % b == 0 ? b : GCD(b, (a % b));
}
您也可以使用一个
返回值

function GCD(a, b) {
    if (a % b == 0) {
        return b;
    }
    else {
        return GCD(b, (a % b));
    }
}
function GCD(a, b) {
    return a % b == 0 ? b : GCD(b, (a % b));
}

我粘贴了您的代码以进行尝试,它在第2行给了我警告:使用“==”与0进行比较。
GCD
中的一个路径中没有
return
。这很可疑。这就是你想要做的吗->?你在GCDThanks的最后一句话中缺少了一个
返回值
!现已修复:)。我知道我错过了一些基本的东西。我想是时候多读点书了:完美!非常感谢,我知道我一定错过了一些非常基本的东西(呵呵:)