Given two numbers N and M. The task is to find the product of the 2 numbers using recursion.
Note: The numbers can be both positive or negative.
Examples:
Input : N = 5 , M = 3 Output : 15 Input : N = 5 , M = -3 Output : -15 Input : N = -5 , M = 3 Output : -15 Input : N = -5 , M = -3 Output:15
A recursive solution to the above problem for only positive numbers is already discussed in the previous article. In this post, a recursive solution for finding the product for both positive and negative numbers is discussed.
Below is the step by step approach:
- Check if one or both of the numbers are negative.
- If the number passed in the second parameter is negative swap the parameters and call the function again.
- If both of the parameters are negative call the function again and pass the absolute values of the numbers as parameters.
- If n>m call the function with swapped parameters for less execution time of the function.
- As long as m is not 0 keep on calling the function with subcase n, m-1 and return n + multrecur(n, m-1).
Below is the implementation of the above approach:
C++
// C++ program to find product of two numbers // using recursion #include <iostream> using namespace std; // Recursive function to calculate the product // of 2 integers int multrecur( int n, int m) { // case 1 : n<0 and m>0 // swap the position of n and m to keep second // parameter positive if (n > 0 && m < 0) { return multrecur(m, n); } // case 2 : both n and m are less than 0 // return the product of their absolute values else if (n < 0 && m < 0) { return multrecur((-1 * n), (-1 * m)); } // if n>m , swap n and m so that recursion // takes less time if (n > m) { return multrecur(m, n); } // as long as m is not 0 recursively call multrecur for // n and m-1 return sum of n and the product of n times m-1 else if (m != 0) { return n + multrecur(n, m - 1); } // m=0 then return 0 else { return 0; } } // Driver code int main() { cout << "5 * 3 = " << multrecur(5, 3) << endl; cout << "5 * (-3) = " << multrecur(5, -3) << endl; cout << "(-5) * 3 = " << multrecur(-5, 3) << endl; cout << "(-5) * (-3) = " << multrecur(-5, -3) << endl; return 0; } |
Java
//Java program to find product of two numbers //using recursion public class GFG { //Recursive function to calculate the product //of 2 integers static int multrecur( int n, int m) { // case 1 : n<0 and m>0 // swap the position of n and m to keep second // parameter positive if (n > 0 && m < 0 ) { return multrecur(m, n); } // case 2 : both n and m are less than 0 // return the product of their absolute values else if (n < 0 && m < 0 ) { return multrecur((- 1 * n), (- 1 * m)); } // if n>m , swap n and m so that recursion // takes less time if (n > m) { return multrecur(m, n); } // as long as m is not 0 recursively call multrecur for // n and m-1 return sum of n and the product of n times m-1 else if (m != 0 ) { return n + multrecur(n, m - 1 ); } // m=0 then return 0 else { return 0 ; } } //Driver code public static void main(String[] args) { System.out.println( "5 * 3 = " + multrecur( 5 , 3 )); System.out.println( "5 * (-3) = " + multrecur( 5 , - 3 )); System.out.println( "(-5) * 3 = " + multrecur(- 5 , 3 )); System.out.println( "(-5) * (-3) = " +multrecur(- 5 , - 3 )); } } |
Python3
# Python 3 program to find product of two numbers # using recursion # Recursive function to calculate the product # of 2 integers def multrecur(n, m) : # case 1 : n<0 and m>0 # swap the position of n and m to keep second # parameter positive if n > 0 and m < 0 : return multrecur(m,n) # case 2 : both n and m are less than 0 # return the product of their absolute values elif n < 0 and m < 0 : return multrecur(( - 1 * n),( - 1 * m)) # if n>m , swap n and m so that recursion # takes less time if n > m : return multrecur(m, n) # as long as m is not 0 recursively call multrecur for # n and m-1 return sum of n and the product of n times m-1 elif m ! = 0 : return n + multrecur(n, m - 1 ) # m=0 then return 0 else : return 0 # Driver Code if __name__ = = "__main__" : print ( "5 * 3 =" ,multrecur( 5 , 3 )) print ( "5 * (-3) =" ,multrecur( 5 , - 3 )) print ( "(-5) * 3 =" ,multrecur( - 5 , 3 )) print ( "(-5) * (-3) =" ,multrecur( - 5 , - 3 )) # This code is contributed by ANKITRAI1 |
C#
// C# program to find product of // two numbers using recursion using System; class GFG { // Recursive function to calculate // the product of 2 integers static int multrecur( int n, int m) { // case 1 : n<0 and m>0 // swap the position of n and m // to keep second parameter positive if (n > 0 && m < 0) { return multrecur(m, n); } // case 2 : both n and m are less than 0 // return the product of their absolute values else if (n < 0 && m < 0) { return multrecur((-1 * n), (-1 * m)); } // if n>m , swap n and m so that // recursion takes less time if (n > m) { return multrecur(m, n); } // as long as m is not 0 recursively // call multrecur for n and m-1 return // sum of n and the product of n times m-1 else if (m != 0) { return n + multrecur(n, m - 1); } // m=0 then return 0 else { return 0; } } // Driver code public static void Main() { Console.WriteLine( "5 * 3 = " + multrecur(5, 3)); Console.WriteLine( "5 * (-3) = " + multrecur(5, -3)); Console.WriteLine( "(-5) * 3 = " + multrecur(-5, 3)); Console.WriteLine( "(-5) * (-3) = " + multrecur(-5, -3)); } } // This code is contributed by anuj_67 |
PHP
<?php // PHP program to find product of // two numbers using recursion // Recursive function to calculate // the product of 2 integers function multrecur( $n , $m ) { // case 1 : n<0 and m>0 // swap the position of n and m to keep second // parameter positive if ( $n > 0 && $m < 0) { return multrecur( $m , $n ); } // case 2 : both n and m are less than 0 // return the product of their absolute values else if ( $n < 0 && $m < 0) { return multrecur((-1 * $n ), (-1 * $m )); } // if n>m , swap n and m so that // recursion takes less time if ( $n > $m ) { return multrecur( $m , $n ); } // as long as m is not 0 recursively call multrecur for // n and m-1 return sum of n and the product of n times m-1 else if ( $m != 0) { return $n + multrecur( $n , $m - 1); } // m=0 then return 0 else { return 0; } } // Driver code echo "5 * 3 = " . multrecur(5, 3) . "\n" ; echo "5 * (-3) = " . multrecur(5, -3) . "\n" ; echo "(-5) * 3 = " . multrecur(-5, 3) . "\n" ; echo "(-5) * (-3) = " . multrecur(-5, -3) . "\n" ; // This code is contributed by mits ?> |
Javascript
<script> // Javascript program to find product // of two numbers using recursion // Recursive function to calculate the // product of 2 integers function multrecur(n, m) { // case 1 : n<0 and m>0 // Swap the position of n and m to // keep second parameter positive if (n > 0 && m < 0) { return multrecur(m, n); } // case 2 : both n and m are less than 0 // return the product of their absolute values else if (n < 0 && m < 0) { return multrecur((-1 * n), (-1 * m)); } // If n>m , swap n and m so that recursion // takes less time if (n > m) { return multrecur(m, n); } // As long as m is not 0 recursively // call multrecur for n and m-1 // return sum of n and the product // of n times m-1 else if (m != 0) { return n + multrecur(n, m - 1); } // m=0 then return 0 else { return 0; } } // Driver code document.write( "5 * 3 = " + multrecur(5, 3) + "<br>" ); document.write( "5 * (-3) = " + multrecur(5, -3) + "<br>" ); document.write( "(-5) * 3 = " + multrecur(-5, 3) + "<br>" ); document.write( "(-5) * (-3) = " + multrecur(-5, -3) + "<br>" ); // This code is contributed by rutvik_56 </script> |
5 * 3 = 15 5 * (-3) = -15 (-5) * 3 = -15 (-5) * (-3) = 15
Time Complexity: O(max(N, M))
Auxiliary Space: O(max(N, M))
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!