By making use of recursion, we can multiply two integers with the given constraints.
To multiply x and y, recursively add x y times.
Approach:
Since we cannot use any of the given symbols, the only way left is to use recursion, with the fact that x is to be added to x y times.
Base case: When the numbers of times x has to be added becomes 0.
Recursive call: If the base case is not met, then add x to the current resultant value and pass it to the next iteration.
C++
#include<iostream>
using namespace std;
class GFG
{
public : int multiply( int x, int y)
{
if (y == 0)
return 0;
if (y > 0 )
return (x + multiply(x, y-1));
if (y < 0 )
return -multiply(x, -y);
}
};
int main()
{
GFG g;
cout << endl << g.multiply(5, -11);
getchar ();
return 0;
}
|
C
#include<stdio.h>
int multiply( int x, int y)
{
if (y == 0)
return 0;
if (y > 0 )
return (x + multiply(x, y-1));
if (y < 0 )
return -multiply(x, -y);
}
int main()
{
printf ( "\n %d" , multiply(5, -11));
getchar ();
return 0;
}
|
Java
class GFG {
static int multiply( int x, int y) {
if (y == 0 )
return 0 ;
if (y > 0 )
return (x + multiply(x, y - 1 ));
if (y < 0 )
return -multiply(x, -y);
return - 1 ;
}
public static void main(String[] args) {
System.out.print( "\n" + multiply( 5 , - 11 ));
}
}
|
Python3
def multiply(x,y):
if (y = = 0 ):
return 0
if (y > 0 ):
return (x + multiply(x, y - 1 ))
if (y < 0 ):
return - multiply(x, - y)
print (multiply( 5 , - 11 ))
|
C#
using System;
class GFG {
static int multiply( int x, int y) {
if (y == 0)
return 0;
if (y > 0)
return (x + multiply(x, y - 1));
if (y < 0)
return -multiply(x, -y);
return -1;
}
public static void Main() {
Console.WriteLine(multiply(5, -11));
}
}
|
PHP
<?php
function multiply( $x , $y )
{
if ( $y == 0)
return 0;
if ( $y > 0 )
return ( $x + multiply( $x ,
$y - 1));
if ( $y < 0 )
return -multiply( $x , - $y );
}
echo multiply(5, -11);
?>
|
Javascript
<script>
function multiply( x, y)
{
if (y == 0)
return 0;
if (y > 0 )
return (x + multiply(x, y-1));
if (y < 0 )
return -multiply(x, -y);
}
document.write( multiply(5, -11));
</script>
|
Time Complexity: O(y) where y is the second argument to function multiply().
Auxiliary Space: O(y) for the recursion stack
Another approach: The problem can also be solved using basic math property
(a+b)2 = a2 + b2 + 2a*b
⇒ a*b = ((a+b)2 – a2 – b2) / 2
For computing the square of numbers, we can use the power function in C++ and for dividing by 2 in the above expression we can write a recursive function.
Below is the implementation of the above approach:
C++
#include<bits/stdc++.h>
using namespace std;
int divideby2( int num)
{
if (num<2)
return 0;
return 1 + divideby2(num-2);
}
int multiply( int a, int b)
{
int whole_square= pow (a+b,2);
int a_square= pow (a,2);
int b_square= pow (b,2);
int val= whole_square- a_square - b_square;
int product;
if (val>=0)
product = divideby2(val);
else
product = 0 - divideby2( abs (val));
return product;
}
int main()
{
int a=5;
int b=-11;
cout << multiply(a,b);
return 0;
}
|
Java
import java.util.*;
class GFG {
static int divideby2( int num)
{
if (num < 2 )
return 0 ;
return 1 + divideby2(num - 2 );
}
static int multiply( int a, int b)
{
int whole_square = ( int )Math.pow(a + b, 2 );
int a_square = ( int )Math.pow(a, 2 );
int b_square = ( int )Math.pow(b, 2 );
int val = whole_square - a_square - b_square;
int product;
if (val >= 0 )
product = divideby2(val);
else
product = 0 - divideby2(Math.abs(val));
return product;
}
public static void main(String[] args)
{
int a = 5 ;
int b = - 11 ;
System.out.println(multiply(a, b));
}
}
|
Python3
def divideby2(num):
if (num < 2 ):
return 0
return 1 + divideby2(num - 2 )
def multiply(a, b):
whole_square = (a + b) * * 2
a_square = pow (a, 2 )
b_square = pow (b, 2 )
val = whole_square - a_square - b_square
if (val > = 0 ):
product = divideby2(val)
else :
product = 0 - divideby2( abs (val))
return product
a = 5
b = - 11
print (multiply(a, b))
|
C#
using System;
class GFG {
static int divideby2( int num)
{
if (num < 2)
return 0;
return 1 + divideby2(num - 2);
}
static int multiply( int a, int b)
{
int whole_square = ( int )Math.Pow(a + b, 2);
int a_square = ( int )Math.Pow(a, 2);
int b_square = ( int )Math.Pow(b, 2);
int val = whole_square - a_square - b_square;
int product;
if (val >= 0)
product = divideby2(val);
else
product = 0 - divideby2(Math.Abs(val));
return product;
}
public static void Main( string [] args)
{
int a = 5;
int b = -11;
Console.WriteLine(multiply(a, b));
}
}
|
Javascript
function divideby2(num)
{
if (num<2)
return 0;
return 1 + divideby2(num-2);
}
function multiply(a, b)
{
let whole_square = Math.pow(a+b,2);
let a_square = Math.pow(a,2);
let b_square = Math.pow(b,2);
let val = whole_square- a_square - b_square;
let product;
if (val>=0)
product = divideby2(val);
else
product = 0 - divideby2(Math.abs(val));
return product;
}
let a = 5;
let b = -11;
console.log(multiply(a,b));
|
PHP
<?php
function divideby2( $num )
{
if ( $num < 2)
return 0;
return 1 + divideby2( $num -2);
}
function multiply( $a , $b )
{
$whole_square = pow( $a + $b ,2);
$a_square = pow( $a ,2);
$b_square = pow( $b ,2);
$val = $whole_square - $a_square - $b_square ;
$product ;
if ( $val >=0)
$product = divideby2( $val );
else
$product = 0 - divideby2( abs ( $val ));
return $product ;
}
$a = 5;
$b = -11;
echo (multiply( $a , $b ));
?>
|
Time complexity: O(num)
Auxiliary space: O(num) for recursive call stack
Russian Peasant (Multiply two numbers using bitwise operators)
Please write comments if you find any of the above code/algorithm incorrect, or find better ways to solve the same problem.
Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!
Last Updated :
19 Sep, 2022
Like Article
Save Article