題組內容
四、下列問題,請用遞迴(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);
}
{
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);
}
詳解
另一種解法用短除法。
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;
}
}
}
詳解
兩種寫法:會差一次呼叫。


詳解
詳解
-
int GCD(int N1, int N2)
-
{
-
if(N1>0 && N2>0)
-
{
-
if(N1>=N2)
-
N1=N1%N2;//如果N1大於N2,就使用輾轉相除法,N1除以N2後的餘數,需要保留(商數不需要當作下一次計算的數值),N1原本的數值也用不到了,可以把N1取代為相除後的餘數
-
else
-
N2=N2%N1;
-
-
if(N1>0&&N2>0)
-
return GCD(N1,N2);
-
else if(N1==0)
-
return N2;
-
else if(N2==0)
-
return N1;
-
}
-
-
}