2015-11-07 56 views
0

我想实现一个递归函数来计算两个数字的gcd,但我的代码不工作,任何想法有什么不对?递归函数来计算最大公约数

public static int gcd(int a, int b) { 
    if (a == b) { 
     return a; 
    } 

    while (a != b) { 
     if (a > b) { 
      gcd(a - b, b); 
     } else if (b > a) { 
      gcd(a, b - a); 
     } 
    } 
    return a; 
} 
+0

一般来说,递归策略和'while'循环是互斥的。希望这有助于提示。 – CollinD

回答

2

如果您使用递归,则不需要while循环。只要做到:

public static int gcd(int a, int b) { 
    if (a == b) { 
     return a; 
    } 

    if (a > b) 
     return gcd(a - b, b); 

    return gcd(a, b - a); 
} 

顺便说一句,while (a != b)是一个无限循环,如果达到它。

+0

为什么这是一个无限循环?当你再次调用函数时,参数a和b是否改变? – Maxim

+0

@Maxim你预计a和b会发生什么变化?你永远不会改变a和b的值。它们是原始数据类型,它们不是对象。当再次用较小的a或b值调用函数时,它们的值在函数的当前堆栈中不会改变。 – Bon

+0

明白了!非常感谢你! – Maxim