c语言递归求最大公约数(编写最大公约数的递归函数)
C语言编写递归函数int gcd(int m,int n),计算m和n的最大公约数
#include?stdio.h
int?gcd(int?m,int?n)?{
????if(m*n==0)
???? return?(m==0?n:m);
????if(mn)
???? return?gcd(m%n,n);
????else?if(mn)
???? return?gcd(n%m,m);
}
int?main(void)?{
????int?m,n;
????printf("请输入两个数:\n");
????scanf("%d%d",m,n);
????printf("其最大公约数为:\n");
????printf("%d\n",gcd(m,n));
????return?0;
}
运行结果
C语言:利用递归求最大公约数
//用递归求最大公约数
//我给你简化并改了一下可以用了
#include
int
gcd(int
m,int
n);
int
main()
{
int
m,n;
printf("input
m,n:\n");
scanf("%d%d",m,n);
printf("%d\n",gcd(m,n));
}
int
gcd(int
m,int
n)
{
if(mn)//大于和小于只要""或""就够了,不需要两个
return
gcd(m-n,n);
else
if(m
评论
加载更多
C语言递归最大公约数,求会的帮忙解释下
从main函数里看,ruturn 的结果给了printf那里的%d,那么机器就要继续计算这个return的新结果gcd(y,x%y),也就是将新的两个参数y和x%y传递给函数gcd进行运算。
假如要计算gcd(6,4),机器判断“6%4==0”为假,就将新的参数4和6%4传递给gcd继续运算,即gcd(4,2);新参数的这一轮里执行到判断“4%2==0”时结果为真,故直接return返回y,即这里的第二个参数2。故6和4最大公约数为2,计算完毕。
所以能不能换成ruturn gcd(x,x%y)很明显~
C语言,用递归函数求最大公约数
#includestdio.h
int?gcd(int?a,int?b)
{if(a%b==0)return?b;
?return?gcd(b,a%b);
}
int?main()
{int?a,b;
?scanf("%d%d",a,b);
?printf("%d\n",gcd(a,b));??
?return?0;
}
C语言 用递归求最大公约数
//用递归求最大公约数
//我给你简化并改了一下可以用了
#includestdio.h
int gcd(int m,int n);
int main()
{
int m,n;
printf("Input m,n:\n");
scanf("%d%d",m,n);
printf("%d\n",gcd(m,n));
}
int gcd(int m,int n)
{
if(mn)//大于和小于只要""或""就够了,不需要两个
return gcd(m-n,n);
else if(mn)
return gcd(m,n-m);
else if(m==n)
return m;
}