#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)); }