递归函数啊。就是说如果y是0,则递归结束,返回x,否则继续递归,将y传递给x,x%y得结果传递给y
欧几里得算法(Eculidean Algorithm)指明:a,b最大公约数(Greatest Common Divisor),就等于b,a%b的最大公约数,公式如下
gcd(a,b)=gcd(b,a%b)
举例来说名:
假如x = 12,y=28
(说明:!是逻辑非,0为假,非0为真,y非0,所以为真,所以!y就是非真,也就是假)
!y为假,return GCD(28,12%28),也就是GCD(28,12)
x=28,y=12
!y为假,return GCD(12,28%12),也就是GCD(12,4)
x=12,y=4
!y为假,return GCD(4,12%4),也就是GCD(4,0)
x=4,y=0
!y为真(!0为真),return x,也就是return 4
4是12和28的最大公约数
回答:
#include<stdio.h>
//欧几里得(辗转相除法)求最大公约数
int GCD(int x,int y){
if(!y){ //这里对y进行判断,如果不为0,就继续递归
return x;
}
else{
return GCD(y,x%y);
}
}
int main(){
int c = GCD(204, 45);
printf("%d",c);
}