作者在 2011-03-29 21:38:14 发布以下内容
学习程序有一些经典的求解算法我们必须得掌握,
像本例——求两个非0自然数的最大公约数——是学习C语言时必要理解的。
为解决它,通常的函数编写是这样的:
int fun(int a,int b)
{
int tmp;
if(a<b)
{
tmp=a;
a=b;
b=tmp;
}
while(b!=0)
{
tmp=a;
a=b;
b=tmp%b;
}
return a;
{
int tmp;
if(a<b)
{
tmp=a;
a=b;
b=tmp;
}
while(b!=0)
{
tmp=a;
a=b;
b=tmp%b;
}
return a;
}
这里给出一个解决上述问题的递归函数——
int fun(int a,int b)
{
int temp;
if(a<b)
{
temp=a;
a=b;
b=temp;
}
if(b==0) return a;
else return fun(b,a%b);
}
{
int temp;
if(a<b)
{
temp=a;
a=b;
b=temp;
}
if(b==0) return a;
else return fun(b,a%b);
}
显然,第二个短小而更加有吸引力。