我试图更好地理解递归。如果我理解正确,递归适用于您的基本案例和原始案例的更简单版本。因此,通常人们会看到代码从参数中减一。但是,我看到下面的代码,如果不简化案例,我不明白它是如何工作的。任何解释都会有帮助。
public static long gcd(long a, long b) {
if (b==0)
return a;
else
return gcd(b, a % b);
}
最佳答案
此特定示例使用 Euclidean algorithm 。它指出,您可以通过取第二个数字并将其作为第一个数字,然后取 a/b 的余数来获得第二个数字,从而找到该值的 gcd。继续执行此操作,直到第二个数字达到 0。
示例
gcd(2,8)
a=2
b=8
a%b=2
所以下一个调用是gcd(8,2)
a=8
b=2
a%b=0 (since 8/2=4)
所以它会调用 gcd 一次剩余时间 gcd(2,0)
a=2
b=0
它将达到 b==0
的基本情况并返回 a=2
。
关于java - 用JAVA中的递归解释最大公约数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28181757/