为什么我的GCD程序没有运行?

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)

use*_*109 5

递归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=60m%n = 24%60 = 24.所以递归调用是gcd(60,24)自动交换参数.