我不了解此递归函数如何计算gcd有人可以详细解释此递归函数如何返回gcd吗?
#include <stdio.h>
long gcd(long, long);
int main() {
long x, y, hcf, lcm;
printf("Enter two integers\n");
scanf("%ld%ld", &x, &y);
hcf = gcd(x, y);
lcm = (x*y)/hcf;
printf("Greatest common divisor of %ld and %ld = %ld\n", x, y, hcf);
printf("Least common multiple of %ld and %ld = %ld\n", x, y, lcm);
return 0;
}
long gcd(long a, long b) {
if (b == 0) {
return a;
}
else {
return gcd(b, a % b);
}
}
答案 0 :(得分:1)
您可以在此处了解有关此算法的信息:Euclidean algorithm
基本上,如果
a == bq + r
如果r
是a
除以b
的余数(所以0 <= r < b
)
然后
gcd(a, b) == gcd(b, r)
请注意,a%b
是余数r
。因此,您可以使用递归来计算gcd(a, b)
当r == 0
时,表示a == bq
或b
除以a
。
因此,b
是a, b
的最大公约数,也适用于原稿a, b
。此时,递归调用将b
保留为a
,将0
保留为b
,因此它返回a
。
希望此说明涵盖所有内容
答案 1 :(得分:0)
可视化...
// ...
long gcd(long a, long b) {
fprintf(stderr, "INFO: called gcd(%ld, %ld)\n", a, b); // visualization
if (b == 0) {
// ...