【发布时间】:2015-04-20 23:15:33
【问题描述】:
我正在自学 Java,所以我在加州大学伯克利分校 CS 61B 做实验室。我正在尝试编写一个 gcd 方法来使我的 toString 方法工作。
toString 方法以非约简形式打印 Fraction。 检查 toString 方法中的代码。它正在调用另一个名为 gcd 计算两个正整数的最大公约数 (GCD)。 如果此方法正常工作,toString 将以减少的形式打印 Fractions 形式。我必须重写 gcd 的主体,以便它是 正确计算 GCD 的递归函数。
这是我的 toString 方法:
public String toString() {
int thisGcd = gcd(numerator, denominator);
return (numerator / thisGcd + "/" + denominator / thisGcd);
}
我的目标是编写正确的 gcd 函数,以便 toString 返回不可约形式的分数。这是我写的:
private static int gcd(int x, int y) {
int div;
if(x<0 || y<0){
return -1;
}
else {
if(x>y){
div = y ;
}
else{
div = x;
}
while( div !=0){
if( (x % div==0 )&&(y % div == 0) ) {
return div;
}
div --;
}
}
}
说明是关于使用以下伪代码编写递归 gcd 函数,但我不确定如何准确实现它:
function gcd(a, b)
if b = 0
return a
else
return gcd(b, a mod b)
我的 gcd 函数有什么问题?我如何让我的工作?我将如何编写递归函数?
【问题讨论】:
-
对于大数字,性能要好得多。请使用 10000000/9999999 测试您的代码。请用否定数字测试您的方法和建议的答案方法。例如-2/4、2/-4 和 -2/-4。
标签: java algorithm recursion greatest-common-divisor