欧几里德算法 GCD
递归:
1 int gcd(int a,int b) 2 { 3 return b==0?a:gcd(b,a%b); 4 }
非递归:
1 int gcd(int m,int n) 2 { 3 int r; 4 while( (r=m%n)>0) 5 { 6 m=n; 7 n=r; 8 } 9 return n; 10 }
不用考虑那个数值大小的问题,直接进行运算
数据测试:
gcd(8,12)
1.while r=8%12=8
m=12 n=8
2.while r=12%8=4
m=8 n=4
3.while r=8%4=0 //跳出循环
cout n //n=4