C语言中的递归问题一个小小的疑惑

int GCD(int a,int b)
{ if(a%b==0)return b;
else return GCD(b,a%b);
}
求最大公约数。
把return GCD(b,a%b);去掉之后就错了。为什么?GCD 不是会调用自己的么? 最后不是一定会执行return b 的么?

在满足a%b==0之前,函数需要递归调用GCD,但是每次调用时参数a,b的值都不同,所以return GCD(b,a%b);不能去掉。

GCD 不是会调用自己的么?:你把return GCD(b,a%b);去掉它怎么调用自己......
最后不是一定会执行return b 的么?:只有当a%b==0才return b,不满足条件继续递归,每次递归时参数a,b会变化