1. 程式人生 > >輾轉相除法求最大公約數------一行代碼

輾轉相除法求最大公約數------一行代碼

pre 出現 col 如果 一行 多說 老師 百度 nbsp

今天學到一行代碼,感覺好牛逼--------當然是老師上課講的.

輾轉相除法是求最大公約數最好的方式了吧!

輾轉相除法原理我也不想多說,百度一下就可以了(基本就是用大數與小數取余,再用比余數大一點的數與余數取余,

   反復直到出現余數為0,那個比0大一點的數就是最大公約數)

好了,廢話不多說了------上代碼

int gcd(int m, int n){
        return n % m == 0 ? m : gcd(n%m, m);
    }

詳細講解一下:

  優勢是使用了遞歸,一直讓大數與小數取余,直到出現0,那麽那個小數就是最大公約數.

  當m是較小數時, return n % m == 0 ? m : gcd(n%m, m);中,如果一次得不到最大公約數,那麽gcd(n%m, m

)中第二個參數

    就應該換為第一次中的較小數了.

  當m是較大數時,自習觀察代碼,就會發現叫大數和較小數互換了位置.

輾轉相除法求最大公約數------一行代碼