我正在使用euclids algorythm的简化版本来查找两个整数的hcf。使用递归函数。似乎没有工作,它只是一直返回c。任何想法为什么它最终不会返回+ b?
public class Euclid {
public static void main(String[] args) {
// TODO Class to find HCF (GCD) of two ints, using recursion
Euclid r = new Euclid();
System.out.println(r.hcf(188, 112));
}
public int hcf(int a, int b){
int c = -11;
if(a == 0 || b == 0){
return a+b; // base case
}
else if (a > b){
return hcf(a-b, b);
}
else if (b > a){
return hcf(b-a, a);
}
return c;
}
}
答案 0 :(得分:1)
当你找到最大公约数时,你最终会传递a和b a==b
。您没有处理这种情况,因此返回c
。
一个简单的解决方法就是删除最后一个if
分支,以便在那里处理a==b
个案。
if(a == 0 || b == 0){
return a+b; // base case
}
else if (a > b){
return hcf(a-b, b);
}
else { // b > a or a == b
return hcf(b-a, a);
}
答案 1 :(得分:0)
首先,您无法从static main
调用非静态方法。其次,你的算法有很多案例,很难说你想要做什么。这是我几年前在Python中为Euclid的GCD写的单行内容。让我们看看我们是否可以将它翻译成Java。
def gcd(a, b):
return b if not a%b else gcd(b, a%b)
这是Java。
static int gcd(int a, int b) {
if(!(a % b)) return b;
return gcd(b, a%b);
}
这似乎比你想做的更简单。