最大公因数-返回含义?

时间:2020-11-06 18:40:35

标签: c++ c

这行是做什么的?

->返回gcf(b,a%b); <-

int gcf(int a, int b)
{
if (b == 0)
    return a;
else
    return gcf(b,a % b);

2 个答案:

答案 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,并将其ba % b作为参数传递。
  • 该调用的返回值是从当前调用返回的。

这样做的目的是找到最大公因数(通常称为最大公因数):

  • 由于a % b等于a减去b的某个倍数,因此除以ab的任何数字也将除以a % b。因此,ab的最大公因数也是ba % b的最大公因数。
  • a % b小于b。因此,对gcf的递归调用会导致使用越来越小的参数调用gcf,直到第二个参数为零为止。
  • 当第二个参数为零时,该函数执行return a;而不是return gcf(b,a % b);。此时,a是原始ab的最大公因数,因为在达到零之前已将其尽可能减小。这是从欧几里得的《元素》(Emclid)中得知的,大约公元前300年,书(第VII章),命题1和2。
  • 然后递归函数调用链解开,并在每次调用到原始调用时返回a的值。
相关问题