繁体   English   中英

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

[英]Why is my GCD program in C not running?

我正在尝试使用 C 中的 Euclid 算法(递归)找到两个数字的 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);   
    }
}

递归 GCD 的代码如下所示

int gcd(int m, int n)
{
    if (n==0)
        return m;

    return gcd(n, m % n);
}

不需要交换参数,因为这将由递归处理。 例如,考虑gcd(24, 60) 在这种情况下, n=60m % n = 24%60 = 24 所以递归调用是gcd(60,24) ,自动交换参数。

gcd(60, 24) -> gcd(24, 12) -> gcd(12, 0)

这意味着您需要添加支票。

if ( n == 0 )
{
   return m;
}

或者

if ( m%n == 0 )
{
   return n;
}

您还可以通过在调用中交换值的另一个函数调用来删除变量交换代码。

int gcd(int m, int n) {

   if (m < n) {
      return gcd(n, m);
   }

   if (m%n == 0) {
      return n;
   } else {
      return gcd(n, m % n);   
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM