#include<stdio.h>int gcd(int m,int n){if(m%n==0) printf("%d\n",n);elsegcd(n,m%n);} main(){int m,n;scanf("%d%d",&m,&n);printf("%d",gcd(n,m%n));}
3 回答

BIG阳
TA贡献1859条经验 获得超6个赞
不知道你想完成什么功能。
#include<stdio.h>
int gcd(int m,int n)
{
if(m%n==0) printf("%d\n",n);
else
gcd(n,m%n);
} //没有返回值
main()
{
int m,n;
scanf("%d%d",&m,&n);
printf("%d",gcd(n,m%n));//这里调用gcd函数输出,而gcd函数根本没有返回值。错误在这里。
}

函数式编程
TA贡献1807条经验 获得超9个赞
怎么看起来有点像欧几里得算法,是求最大公因数吧?
如果要求m/n是否整除,一个m%n就足够了(m>=n)
求最大公因数的话,可以不递归,而且gcd(int m,int n)没有返回值,还有这里printf("%d",gcd(n,m%n));应该是gcd(m,n);

慕尼黑的夜晚无繁华
TA贡献1864条经验 获得超6个赞
大哥
利用辗转相除法求最大公约数算法没问题,问题在于你的函数没返回值
#include<stdio.h>
int gcd(int m,int n)
{
if(m%n==0)
printf("%d\n",n);
else
gcd(n ,m%n);
return 1;
}
main()
{
int m,n;
scanf("%d%d",&m,&n);
gcd(m,n);
}
- 3 回答
- 0 关注
- 125 浏览
添加回答
举报
0/150
提交
取消