0
public static int divisor(int m, int n) {
    if (m == 0 || n == 0) {
        return m+n;
    } else {
        return divisor(n, m%n);
    }
}

amazon.interviewstreet.com で、一部の入力に対して間違った回答が返されます (テストケースに使用する入力が明らかにされていないため、どれかわかりません)。

また、この実装がスタックオーバーフローを提供し続ける理由(これも、どの入力についてはわかりません)

public static int divisor(int m, int n) {
    if(m == 0 || n == 0) {
        return m+n;
    } else if (m > n) {
        return divisor(n, m%n);
    } else {
        return divisor(m, n%m);
    }
}

何が足りないのか教えてください。プログラミング初心者でまだまだ初心者です。

4

6 に答える 6

1

初め、

return(m, n%m) 

間違いなくコンパイルされません、私はそれが意図されていたと思います

return divisor(m, n%m);

次に、2 番目のスニペットで間違っているのは、負の数の処理だと思います。A と B は -A と -B と同じ GCD を持っているので、追加します。

m = Math.abs(m);
n = Math.abs(n);

メソッドの先頭に

于 2013-07-11T20:13:37.273 に答える
1

最初はプログラミングコンテスト用のコードだと思います。その場合は、データ型に注意してください。「int」では入力を保持するのに十分ではない可能性があります。代わりに「長い」を試してください。(これは、アルゴリズムが正しい場合にのみ機能します。)

于 2013-07-11T20:21:18.030 に答える
1

おもう

return(m, n%m);

する必要があります

return divisor(m, n%m);

于 2013-07-11T20:02:06.830 に答える
1

nとの負の値の扱いが無効ではないmでしょうか? たとえば、これを読んでください: Javaのモジュラスを負の数のように動作させるための最良の方法は?

于 2013-07-11T20:06:50.257 に答える
1

第二部は何ですか

戻ります (m, n%m);

このコードはコンパイルされますか?

使用する :

public static int divisor(int m, int n) {
if(m == 0 || n == 0)
    return m+n;
else if(m>n)
    return divisor(n, m%n);
else
    return divisor(m, n%m);}
于 2013-07-11T20:12:23.627 に答える