回答編集履歴
3
微修正
test
CHANGED
@@ -78,6 +78,10 @@
|
|
78
78
|
|
79
79
|
public static int gcd(int x, int y) {
|
80
80
|
|
81
|
+
// y == 0 のとき: gcd(x,y) = x
|
82
|
+
|
83
|
+
// そうでないとき: y と、xをyで割った余りrの最大公約数gcd(y,r)に等しい
|
84
|
+
|
81
85
|
return y == 0 ? x : gcd(y, x%y);
|
82
86
|
|
83
87
|
}
|
2
追記
test
CHANGED
@@ -65,3 +65,35 @@
|
|
65
65
|
"再帰を用いて"とあるから「再帰によってループと同じ効果を得る」ってこと。
|
66
66
|
|
67
67
|
だから関数gcd(x,y)にはループが現れない。
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
[追記] 上記コードをきっちきちに詰めて書くと:
|
72
|
+
|
73
|
+
```Java
|
74
|
+
|
75
|
+
public class Trial {
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
public static int gcd(int x, int y) {
|
80
|
+
|
81
|
+
return y == 0 ? x : gcd(y, x%y);
|
82
|
+
|
83
|
+
}
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
public static void main(String[] args) {
|
88
|
+
|
89
|
+
System.out.printf("gcd(28,42) = %d\n", gcd(28,42));
|
90
|
+
|
91
|
+
System.out.printf("gcd(42,28) = %d\n", gcd(42,28));
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
}
|
96
|
+
|
97
|
+
}
|
98
|
+
|
99
|
+
```
|
1
追記
test
CHANGED
@@ -59,3 +59,9 @@
|
|
59
59
|
}
|
60
60
|
|
61
61
|
```
|
62
|
+
|
63
|
+
※ 「次の処理を**繰り返す**」とあるからループを描いたんだろうけど、
|
64
|
+
|
65
|
+
"再帰を用いて"とあるから「再帰によってループと同じ効果を得る」ってこと。
|
66
|
+
|
67
|
+
だから関数gcd(x,y)にはループが現れない。
|