📜  C程序使用递归查找两个数字的LCM

📅  最后修改于: 2021-04-21 21:03:54             🧑  作者: Mango

给定两个整数NM ,任务是使用递归找到它们的LCM。

例子:

方法:想法是使用找到两个数字的LCM的基本基本方法。请按照以下步骤解决问题:

  • 3个整数参数N,MK定义一个递归函数LCM()来找到NM的LCM。
  • 需要考虑以下基本条件:
    • 如果NM等于1 ,则返回N * M。
    • 如果N等于M ,则返回N。
  • 如果K
    • 如果K除以NM ,则返回K * LCM(N / K,M / K,2)
    • 否则,将K递增1并返回LCM(N,M,K + 1)。
  • 否则,返回NM的乘积。
  • 最后,将递归函数的结果打印为所需的LCM。

    下面是上述方法的实现:

    C
    // C program for the above approach
      
    #include 
      
    // Function to return the
    // minimum of two numbers
    int Min(int Num1, int Num2)
    {
        return Num1 >= Num2
                   ? Num2
                   : Num1;
    }
      
    // Utility function to calculate LCM
    // of two numbers using recursion
    int LCMUtil(int Num1, int Num2, int K)
    {
        // If either of the two numbers
        // is 1, return their product
        if (Num1 == 1 || Num2 == 1)
            return Num1 * Num2;
      
        // If both the numbers are equal
        if (Num1 == Num2)
            return Num1;
      
        // If K is smaller than the
        // minimum of the two numbers
        if (K <= Min(Num1, Num2)) {
      
            // Checks if both numbers are
            // divisible by K or not
            if (Num1 % K == 0 && Num2 % K == 0) {
      
                // Recursively call LCM() function
                return K * LCMUtil(
                               Num1 / K, Num2 / K, 2);
            }
      
            // Otherwise
            else
                return LCMUtil(Num1, Num2, K + 1);
        }
      
        // If K exceeds minimum
        else
            return Num1 * Num2;
    }
      
    // Function to calculate LCM
    // of two numbers
    void LCM(int N, int M)
    {
        // Stores LCM of two number
        int lcm = LCMUtil(N, M, 2);
      
        // Print LCM
        printf("%d", lcm);
    }
      
    // Driver Code
    int main()
    {
        // Given N & M
        int N = 2, M = 4;
      
        // Function Call
        LCM(N, M);
      
        return 0;
    }


    输出:
    4
    

    时间复杂度: O(max(N,M))
    辅助空间: O(1)