ここで私を助けてください。次のコードをJavaストリームを使用するコードに変換する必要があります。使用される方法はユークリッドアルゴリズムです。
public int gcd(int m, int n) {
if (n == 0) {
return m;
} else {
return gcd(n, m%n);
}
私はすでに次の方法でストリームを使用しようとしましたが、再帰は許可されておらず、宣言的アプローチにまだ慣れていないため、再帰とループのない方法を考え出そうとしています。
return IntStream.of(m, n).reduce(0, (x, y) -> gcd(n, m-n));
ストリームを使用した例として、ユークリッドアルゴのほとんど逐語的な実装:
int gcd(int m, int n) {
return Stream.iterate(new int[]{m, n}, vals -> new int[] {vals[1], vals[0] % vals[1]}).filter(v -> v[1] == 0).findFirst().get()[0];
}
関数型プログラミングで知られているものをアキュムレータコンセプトとして使用します。
PS毎回新しい配列を作成しないように配列の値を交換する方が効率的ですが、この新しい配列を使用しても、別の答えで提供されたブルートフォースよりもはるかに効率的なアルゴリズムです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加