日期:2014-05-20  浏览次数:20590 次

递归问题
这是书上的一段用递归来计算最大公约数的代码。
package method;

public class GcdFactorialTest {
/*计算最大公约数*/
public int gcd(int m, int n) {
int temp;
/*判断第一个数是否大于第二个数,如果第一个数小于第二个数,就两个数互换*/
if(m < n) {
temp = m;
m = n;
n = temp;
}
/*判断两个数中是否是0,如果一个数为0则返回另外一个数,如果都不为0,递归计算两个数
* 的最大公约数*/
if(n == 0) {
return m;
} else {
return gcd(m, m%n);
}
}

public static void main(String[] args) {
GcdTest gt = new GcdTest();
int r = gt.gcd(456, 36);
System.out.println("456和36的最大公约数为:" + r);
}
}

之前有个例子是
package method;

public class GcdTest {
public int gcd(int m, int n) {
int temp;
if(m == 0) {
return n;
}
if(n == 0) {
return m;
}
if(m < n) {
temp = m;
m = n;
n = temp;
}
int c = n;
while(c != 0) {
c = m % n;
m = n;
n = c;
}
return m;
}

public static void main(String[] args) {
GcdTest gt = new GcdTest();
int r = gt.gcd(432, 54);
System.out.println("432和54的最大公约数为:" + r);
}
}
他们在同一包package method里.我想写到GcdFactorialTest类里,不需要GcdTest类,怎么写呢?

谢谢各位帮我看看,教我改改。 到底怎么才是递归,方法调用自己的方法?但是他怎么做得循环呢?还是不解。

------解决方案--------------------
将 GcdTest类中的 gcd 方法复制到 GcdFactorialTest 就可以了。
至于递归是怎么实现的?你反复用不同数跟踪执行这个程序应该就可以搞明白了