Product of 2 numbers using recursion | Set 2 - GeeksforGeeks

18 Aug, 2021
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).
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++
Java
Python3
C#
PHP
Javascript
// C++ program to find product of two numbers// using recursion#include <iostream>using namespace std; // Recursive function to calculate the product// of 2 integersint 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 codeint 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 program to find product of two numbers//using recursionpublic 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));    }}
# Python 3 program to find product of two numbers# using recursion # Recursive function to calculate the product# of 2 integersdef 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 Codeif __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# program to find product of// two numbers using recursionusing System;class GFG{ // Recursive function to calculate// the product of 2 integersstatic int multrecur(int n, int m){// case 1 : n<0 and m>0// swap the position of n and m// to keep second parameter positiveif (n > 0 && m < 0){    return multrecur(m, n);} // case 2 : both n and m are less than 0// return the product of their absolute valueselse if (n < 0 && m < 0){    return multrecur((-1 * n), (-1 * m));} // if n>m , swap n and m so that// recursion takes less timeif (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-1else if (m != 0){    return n + multrecur(n, m - 1);} // m=0 then return 0else{    return 0;}} // Driver codepublic 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 program to find product of// two numbers using recursion // Recursive function to calculate// the product of 2 integersfunction 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 codeecho "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?>
<script> // Javascript program to find product// of two numbers using recursion // Recursive function to calculate the// product of 2 integersfunction 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 codedocument.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)) 
ankthon
Mithun Kumar
ukasp
vt_m
rutvik_56
pankajsharmagfg
Algorithms
C++ Programs
Recursion
Recursion
Algorithms
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
SDE SHEET - A Complete Guide for SDE Preparation
DSA Sheet by Love Babbar
How to write a Pseudo Code?
Understanding Time Complexity with Simple Examples
Introduction to Algorithms
Header files in C/C++ and its uses
Program to print ASCII Value of a character
How to return multiple values from a function in C or C++?
C++ Program for QuickSort
Sorting a Map by value in C++ STL