实现递归函数来查找HCF / GCD java

时间:2014-02-07 17:07:16

标签: java recursion

我正在使用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;
 }  
}

2 个答案:

答案 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);
}

这似乎比你想做的更简单。