簡體   English   中英

我的遞歸最大公分母 function 工作不正常

[英]My recursive greatest common denominator function isn't working properly

我正在嘗試使用遞歸創建一個 GCD(最大公分母)function。 我不明白為什么它不能正常工作。 對於輸入 10 和 50 返回 36。

這是我的代碼:

int main()
{
    printf("Rez=%d ", gcd(10,50));
    return 0;
}

int gcd(int a, int b)
{
    static int n=0;
    int result=1;
    n++;
    if(a<=1 || b<=1)
        return 1;
    else
    {
        if(a%n==0 && b%n==0)
            result=n* gcd(a/n,b/n);
        else
            gcd(a,b);
    }
    return result;
}

使用 static 變量是一個問題,因為您以n * gcd(...)的形式使用它,並且 n 的值不應與遞歸使用的值相同。 所以你應該傳遞一個參數。 您還應該添加一個條件以在 n 大於較小項時停止:

#include <stdio.h>

int main()
{
    printf("%d\n", gcd(10, 50, 1)); //==>10
    printf("%d\n", gcd(7, 35, 1));  //==>7
    printf("%d\n", gcd(8, 22, 1));  //==>2
    printf("%d\n", gcd(49, 5, 1));  //==>1
    printf("%d\n", gcd(0, 0, 1));   //==>1
    printf("%d\n", gcd(4, 2, 0));   //==>0
    return 0;
}

int gcd(int a, int b, int n)
{
    if (n <= 0) return 0;
    if (n > (a < b ? a : b) || a<=1 || b<=1) return 1;
    else if(a%n==0 && b%n==0) return n * gcd(a/n, b/n, n+1);
    else return gcd(a, b, n+1);
}

static 變量是錯誤的原因。

result=n* gcd(a/n,b/n);

n在調用遞歸之后計算。 因此,當您調用gcd( 5/5, 25/5 )時遞歸停止並且n通過該調用遞增到 6,您只需 6 * gcd( 10/1, 50/1 ) = 6 * 6 * gcd( 10/2, 50/2) = 6 * 6 * 6 = gcd(5/5, 25/5) = 6 * 6 * 6 * 1 = 216

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM