24537
以下のようにgcd(a,b)を作って最大公約数を求めようと思ったのですが、繰り返しが終わらずに、公約数を求めることができませんでした。  
どこが間違っているのでしょうか。

```

    public static int gcd(int a, int b){
    
        while(true){
            System.out.println(a+" "+b);
            if(b==0)return a;
            gcd(b, a%b);
        }
    
    
    }
    
    public static void main(String[] args){
    
        int a,b;
    
        Scanner scan=new Scanner(System.in);
        a=scan.nextInt();
        b=scan.nextInt();
    
        System.out.println(gcd(a,b));
    
        scan.close();
    
```
CC BY-SA 3.0
2016-05-03T12:31:13.667
24536
2016-05-06T07:59:19.997
15279
question
java
Javaで最大公約数を求める
`gcd(b, a%b);`は`return gcd(b, a%b);`ではありませんか? あと`while`ループはいらないのでは．

```

    public static int gcd(int a, int b){
        System.out.println(a+" "+b);
        if(b==0) return a;
        return gcd(b, a%b);
    }
    
```
CC BY-SA 3.0
2016-05-03T12:39:35.603
24537
2016-05-03T12:39:35.603
14418
24536
answer
メソッドの再帰呼び出しについて理解が足りてないように感じたので勉強しましょう。  
やりたい処理はこんな感じだと思います。

```

    public static int gcd(int a, int b) {
    
       // 引き数のint値を表示
       System.out.println(a + " " + b);
    
        // bがゼロならaを返却
        if(b == 0) {
          return a;
        }
    
        // そうじゃないなら再計算
        return gcd(b, a%b);
    }
    
```
CC BY-SA 3.0
2016-05-06T07:52:25.840
24605
2016-05-06T07:59:19.997
2016-05-06T07:59:19.997
15308
15308
24536
answer