程序理解欧几米德求最大公约数

img


这句话怎么理解救救孩子😰😰

递归函数啊。就是说如果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的最大公约数

回答:

img

#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);
}