#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 關注
- 105 瀏覽
添加回答
舉報
0/150
提交
取消