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
**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
- 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 <stdio.h> ` ` ` `// 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; ` `}` |

*chevron_right*

*filter_none*

**Output:**

4

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

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.