您能帮我解释一下这如何得出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);
}
答案 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);
返回一个值。该值是使用两个参数fun
和y
调用x / y
的结果。
此函数本身的使用称为递归。调用fun
的可能值分为基本案例和一般案例。在基本情况中,该函数以简单的方式计算。例如,在此函数中,当y <= 1
时,该函数返回x
。
在一般情况下,该函数是通过使用不同的参数调用自身来计算的。通常,可以以某种方式减少或简化不同的论点(尽管在最终达到基本情况之前,论点变得更大或更复杂的复杂情况也是可能的)。在此函数中,通过用x
和y
或y
和x/y
替换x/y
和y
来减少自变量。在任何一种情况下,至少一个参数都通过除以y
而变得更小,在这一点上,我们知道该参数大于1。
最终,该函数将使用第二个参数减小到小于或等于1的值进行调用,此时该函数将返回第一个参数,并且整个调用序列将通过返回该值而结束。