这行是做什么的?
->返回gcf(b,a%b); <-
int gcf(int a, int b)
{
if (b == 0)
return a;
else
return gcf(b,a % b);
答案 0 :(得分:2)
它将以递归方式运行将b的参数更改为mod(a,b)的函数。
例如,让我们执行a = 4和b = 6:
在第一次迭代中,我们调用:
gcf(6, 4)
我们评估是否为b=0
,这是错误的。然后我们返回gcf(4,6%4)的值,但该值尚未定义,因此该函数将再次从顶部运行:
下一次迭代将引导我们
gcf(4, 6%4)
与以下相同:
gcf(4, 2)
与之前的b !=0
相同
gcf(2, 4%2) = gcf(2, 2)
b仍然不等于0,所以我们继续做
gcf(2, 2%2) = gcf(2,0)
这里b 等于0 ,因此该函数将返回一个数值:2
答案 1 :(得分:1)
return gcf(b,a % b);
的含义是:
a % b
计算a
除以b
的余数。gcf(b,a % b)
调用函数gcf
,并将其b
和a % b
作为参数传递。这样做的目的是找到最大公因数(通常称为最大公因数):
a % b
等于a
减去b
的某个倍数,因此除以a
和b
的任何数字也将除以a % b
。因此,a
和b
的最大公因数也是b
和a % b
的最大公因数。a % b
小于b
。因此,对gcf
的递归调用会导致使用越来越小的参数调用gcf
,直到第二个参数为零为止。return a;
而不是return gcf(b,a % b);
。此时,a
是原始a
和b
的最大公因数,因为在达到零之前已将其尽可能减小。这是从欧几里得的《元素》(Emclid)中得知的,大约公元前300年,书(第VII章),命题1和2。
a
的值。