Thi*_*cks 1 c algorithm recursion function greatest-common-divisor
我试图用C中的欧几里德算法(递归地)找到两个数字的GCD,并且我确实知道它在数学上并不完全完美,因为它忽略了负数条件,但我只是希望这个用于现在的正数.
#include <stdio.h>
int gcd(int m, int n);
int main() {
return gcd(60, 24);
}
int gcd(int m, int n) {
if (m < n) {
//swapping both a and b
m = m + n;
n = m - n;
m = m - n;
}
if (m == n) {
return m;
} else {
return gcd(n, m % n);
}
}
Run Code Online (Sandbox Code Playgroud)
递归GCD的代码如下所示
int gcd(int m , int n)
{
if (n==0)
return m;
return gcd(n, m%n);
}
Run Code Online (Sandbox Code Playgroud)
不需要交换代码,因为这是由递归处理的.例如,考虑一下gcd(24,60)
.在这种情况下n=60
和m%n = 24%60 = 24
.所以递归调用是gcd(60,24)
自动交换参数.