c函数返回2个值,但仅1个传递给该语句

时间:2018-09-20 19:27:24

标签: c

您能帮我解释一下这如何得出3吗?

int main()
{
  int k = fun(125, 35);

    printf("%d",k);

  return 0;
}

int fun(int x, int y){

      if (y <= 1) return x;

      else if (y > x / y) return fun(y, x / y);

      else return fun(x / y, y);
}

2 个答案:

答案 0 :(得分:3)

您的程序第一次调用fun(int x,int y)时,它将调用fun(125,35)。 由于35> 1和35>(125/35),因此您的函数将返回fun(y,x/y),即fun(35,3)。 现在,由于3> 1但3 <(35/3),因此它将返回fun(x/y,y),即fun(11,3)。现在,3> 1且3 =(11/3),因此它将返回fun(x/y,y),即fun(3,3)。再次3> 1和3>(3/3),因此它将调用fun(3,1)。现在y==1,因此该函数将返回x的值,即3。

答案 1 :(得分:1)

return fun(y, x / y);返回一个值。该值是使用两个参数funy调用x / y的结果。

此函数本身的使用称为递归。调用fun的可能值分为基本案例一般案例。在基本情况中,该函数以简单的方式计算。例如,在此函数中,当y <= 1时,该函数返回x

一般情况下,该函数是通过使用不同的参数调用自身来计算的。通常,可以以某种方式减少或简化不同的论点(尽管在最终达到基本情况之前,论点变得更大或更复杂的复杂情况也是可能的)。在此函数中,通过用xyyx/y替换x/yy来减少自变量。在任何一种情况下,至少一个参数都通过除以y而变得更小,在这一点上,我们知道该参数大于1。

最终,该函数将使用第二个参数减小到小于或等于1的值进行调用,此时该函数将返回第一个参数,并且整个调用序列将通过返回该值而结束。