# C Program to find LCM of two numbers using Recursion

• Last Updated : 15 Dec, 2020

Given two integers N and M, the task is to find their LCM using recursion.

Examples:

Input: N = 2, M = 4
Output: 4
Explanation: LCM of 2, 4 is 4.

Input: N = 3, M = 5
Output: 15
Explanation: LCM of 3, 5 is 15.

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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 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).
• 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:

## 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;``}`

Output:

```4
```

Time Complexity: O(max(N, M))
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up