Почему 0 является выходом для этого рекурсивного метода с наибольшим общим делителем

#java #tail-recursion

Вопрос:

Я пытаюсь понять, почему я продолжаю получать ноль при вводе своего кода. Разве b не должен быть последним остатком и, следовательно, наибольшим общим делителем?

 import java.util.*;
public class GreatestCommonDivisor
{
    public static void input(){
       
       Scanner input = new Scanner (System.in);  
        System.out.println("Enter Guesses");
        
         int a = input.nextInt();
         int b = input.nextInt();
         gcd(a, b, 1, a%b);
    }
    
    public static int gcd(int a, int b, int i, int R){
    if (R == 0){
        System.out.println(b); return R;
    }
    else{
        R = a%b;
        a = b*i   R;
        a = b;
        b = R;
        i  ;
        return gcd(a, b, i, R);
    }
    }
}
 

Комментарии:

1. Почему вы возвращаетесь R , а не b в этом коде? if (R == 0){ ... return R;}

2. Не знаю, каким должен быть этот алгоритм, но он кажется чрезмерно сложным, учитывая, что его можно реализовать так просто, как public static int gcd(int a, int b) { return (b == 0 ? a : gcd(b, a % b)); }