C Program to find LCM of two numbers using Recursion - GeeksforGeeks

15 Dec, 2020
Given two integers N and M, the task is to find their LCM using recursion.
Examples:
Input: N = 2, M = 4Output: 4Explanation: LCM of 2, 4 is 4.
Input: N = 3, M = 5Output: 15Explanation: LCM of 3, 5 is 15.
Approach: The idea is to use the basic elementary method of finding LCM of two numbers. Follow the steps below to solve the problem:
Define a recursive function LCM() with 3 integer parameters N, M, and K to find LCM of N and M.
The following base conditions need to be considered:If N or M is equal to 1, return N * M.If N is equal to M, return N.
If N or M is equal to 1, return N * M.
If N is equal to M, return N.
If K < min(N, M):If K divides both N and M, return K * LCM(N/K, M/K, 2).Otherwise, increment K by 1 and return LCM(N, M, K+1).
If K divides both N and M, return K * LCM(N/K, M/K, 2).
Otherwise, increment K by 1 and return LCM(N, M, K+1).
Otherwise, return the product of N and M.
Finally, print the result of the recursive function as the required LCM.Below is the implementation of the above approach:CC// C program for the above approach  #include <stdio.h>  // Function to return the// minimum of two numbersint Min(int Num1, int Num2){    return Num1 >= Num2               ? Num2               : Num1;}  // Utility function to calculate LCM// of two numbers using recursionint 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 numbersvoid LCM(int N, int M){    // Stores LCM of two number    int lcm = LCMUtil(N, M, 2);      // Print LCM    printf("%d", lcm);}  // Driver Codeint main(){    // Given N & M    int N = 2, M = 4;      // Function Call    LCM(N, M);      return 0;}Output:4
Time Complexity: O(max(N, M))Auxiliary Space: O(1)My Personal Notes
arrow_drop_upSave
Below is the implementation of the above approach:
C
// C program for the above approach  #include <stdio.h>  // Function to return the// minimum of two numbersint Min(int Num1, int Num2){    return Num1 >= Num2               ? Num2               : Num1;}  // Utility function to calculate LCM// of two numbers using recursionint 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 numbersvoid LCM(int N, int M){    // Stores LCM of two number    int lcm = LCMUtil(N, M, 2);      // Print LCM    printf("%d", lcm);}  // Driver Codeint main(){    // Given N & M    int N = 2, M = 4;      // Function Call    LCM(N, M);      return 0;}
4

Time Complexity: O(max(N, M))Auxiliary Space: O(1)
LCM
Mathematical
Recursion
Mathematical
Recursion
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Modular multiplicative inverse
Algorithm to solve Rubik's Cube
Count ways to reach the n'th stair
Program to multiply two matrices
Convex Hull | Set 1 (Jarvis's Algorithm or Wrapping)
Program for Tower of Hanoi
Recursion
Given an array A[] and a number x, check for pair in A[] with sum as x (aka Two Sum)
Backtracking | Introduction
Program for Sum of the digits of a given number