求最大公约数的程序,我输入28,49它会出0,我调试时发现它会在最后一个if循环三遍,请问这是为啥,好奇怪啊

#include<stdio.h>
int gcd(int m,int n){
int g,d;
if(m>n){
g=m%n;
if(g==0){
d=n;
}
else{
m=n;
n=g;
gcd(m,n);
}
}
if(m<n){
g=n%m;
if(g==0){
d=m;
}
else{
n=m;
m=g;
gcd(m,n);
}
}
if(m==n)
d=m;
return d;
}
int main(){
int m,n;
scanf("%d%d",&m,&n);
int k;
k=gcd(m,n);
printf("%d",k);

}

前面加return

img

因为你是通过gcd返回最大公约数的,但是你看程序中,只有最后一行写return了,很显然d没有改变,默认给你返回的0,解决办法就是 递归调用的地方加上return就好了。

img