if与else if 的问题,递归求解公约数

图片说明
图片说明
用递归求最大公约数,用if则错,if else则对。为什么?

其实都不对,应该是
return Gcd(a - b, b);
别的类似

之所以第二个程序侥幸对了,是一些C编译器在没有写return的时候,会自动返回堆栈顶端的变量,因为你是else,没有执行别的代码,所以内侧return的被外侧继续返回。但是这只是特定编译器的特定行为,这代码没法保证正确性。而且从逻辑上根本也不对。