【发布时间】:2019-10-21 06:37:32
【问题描述】:
我很困惑在使用递归函数调用时何时使用“返回”。
我试图找到两个数字的“GCD(最大公约数)”。我实际上认为可行的是:
include <stdio.h>
int gcd (int a, int b);
int main ()
{
int a, b;
printf ("Enter two numbers \n");
scanf ("%d %d", &a, &b);
printf ("GCD for numbers %d and %d is %d\n", a, b, gcd(a,b));
return (0);
}
int gcd (int a, int b)
{
while (a!=b)
{
if (a > b)
gcd(a-b,b);
else if (b > a)
gcd(a,b-a);
}
return (a);
}
但是上面的代码不断地从终端接受数字并且无法运行代码。
但是,当我按如下方式替换函数定义时,代码按预期工作,返回正确的值。
int gcd (int a, int b)
{
while (a!=b)
{
if (a > b)
return gcd(a-b,b);
else if (b > a)
return gcd(a,b-a);
}
return (a);
}
如您所见,唯一的变化是在递归函数调用之前添加了“return”。为什么在我调用 gcd(arg1, arg2) 函数的两种情况下都需要返回?
【问题讨论】:
-
与您的问题无关,但请考虑一下该循环......
a或b何时会改变,使条件改变? -
至于你的问题,你说函数应该返回一个
int值,但是你将从函数返回什么值?如果你想从一个函数中返回一个值,你需要一个显式的return语句。