阿摩線上測驗 登入

申論題資訊

試卷:110年 - 110 經濟部所屬事業機構_新進職員甄試_資訊:1.資訊管理 2.程式設計#103708
科目:國營事業◆1.資訊管理 2.程式設計
年份:110年
排序:0

題組內容

四、下列問題,請用遞迴(Recursive)的方式來撰寫:(共2題,共15分)

申論題內容

(二)請用遞迴方式撰寫一函式GCD,輸入為2個正整數 ,其傳回 為此2個正整數之最大公 因數。(7分)

詳解 (共 6 筆)

詳解 提供者:邊工作邊唸書
int GCD(int A, int B)
{
if( (A % B) == 0)
return B;
else
return GCD(B, A%B);
}
詳解 提供者:我一定會上榜

int GCD(int a, int b){

    while(b != 0) { 

        int r = a % b; 

        a = b; 

        b = r; 

    }

    printf("%d",a);   

}

int main()

{

    int a,b;

    printf("請輸入2個整數");

    scanf("%d %d",&a,&b);

    GCD(a,b);

}


詳解 提供者:Grace

另一種解法用短除法。

int GCD(x, y){
    int i = 1;
    while(true){
        i++;
        if (x%i==0 and y%i == 0){
            return i * GCD(x/i, y/i);
            if [(i^2>=x) or (i^2>=y)
                black;
        }
    }
}

詳解 提供者:Lin Jin
兩種寫法:會差一次呼叫。
665ebce934ca5.jpg665ebd35ef88b.jpg
詳解 提供者:蔡明勳
詳解 提供者:polar33794
  1. int GCD(int N1, int N2)
  2. {
  3. if(N1>0 && N2>0)
  4. {
  5. if(N1>=N2)
  6. N1=N1%N2;//如果N1大於N2,就使用輾轉相除法,N1除以N2後的餘數,需要保留(商數不需要當作下一次計算的數值),N1原本的數值也用不到了,可以把N1取代為相除後的餘數
  7. else
  8. N2=N2%N1;
  9.  
  10. if(N1>0&&N2>0)
  11. return GCD(N1,N2);
  12. else if(N1==0)
  13. return N2;
  14. else if(N2==0)
  15. return N1;
  16. }
  17.  
  18. }