Java - 欧几里德算法的递归函数

min*_*ino 2 java

我似乎无法将以下算法成功转换为Java,请原谅可怕的图片质量,但我正在研究的一个问题是:

欧几里德算法

我曾尝试使用以下代码来表示欧几里德算法,但它似乎不起作用.我真的不知道如何用Java代码表示它.有帮助吗?

public static int gcd(int x, int y) {
    if (y == 0) {
        return x;
    } else if (x >= y && y > 0) {
        return gcd(y, (x % y));
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

勿绮语*_*勿绮语 6

x和y之间没有任意顺序.


Kau*_*kar 5

您的代码不完整!

如果什么x < y?那么你的代码不会返回值!

本书没有提到的是,函数的两个参数不一定需要按降序排列(即x >= y)。您需要做的是gcd考虑到这一事实进行计算。

您只需执行以下操作即可:

public static int gcd ( int x , int y )
{
    if ( y == 0 )                        
        return x;
    else if ( x >= y && y > 0)
        return gcd ( y , x % y );
    else return gcd ( y , x );        // if x < y then go ahead and switch them around.
}
Run Code Online (Sandbox Code Playgroud)