假设gcd(a,b)是自然数a,b的最大公约数,a除b所得到的商和余数分别为p和q,所以a=b✖p+q,右边的式子可以提出一个gcd(b,q),也就是说gcd(b,q)也能整除a,而它又能整除b,所以gcd(b,q)<=gcd(a,b)。再有q=a-b✖q,右边的式子可以提出一个gcd(a,b),也就是gcd(a,b)可以整除q,也能整除b,所以gcd(a,b)<=gcd(b,q)。两者结合,那么,gcd(a,b)=gcd(b,q)即gcd(b,a%b)。通过不断的操作下去,第二个操作数会不断变小(原因:第一次操作,a%b一定<a,第二次操作,第二个操作数一定小于b,所以递归思考下去,第二个操作数会不断变小),所以最终会得到gcd(c,0),而0和c的最大公约数就是c,所以最终返回c就OK了。
代码:
int gcd(int a,int b)
{
if(b==0)
return a;
return gcd(b,a%b);
}