# Return array of products of all other numbers from a given array

## Introduction

This tutorial will show you how to return array of products of all other numbers from a given array. Let’s say you are given an array of non-zero integers. So you have to return an output array of products of all other numbers except the number itself.

## Example

For example, an input array `a[]={1, 2, 3, 4}`, so the output array will be `out[]={24, 12, 8, 6}`.

Therefore, if we analyze the above output array, then

at array index `0`, the output is formulated as `2x3x4 = 24`.

at array index `1`, the output is formulated as `1x3x4 = 12`.

at array index `2`, the output is formulated as `1x2x4 = 8`.

at array index `3`, the output is formulated as `1x2x3 = 6`.

## Java Code

Let’s move on to the implementation of Java code to return array of products of all other numbers from a given array.

The implementation can be done in three ways with `O(n)` time complexity.

### First Approach

In the multiply and divide approach we will multiply all elements in the array and finally divide by elements at array indices to get the desired output.

``````public class ArrayProductsDiv {
public static void main(String[] args) {
int[] a = new int[] { 1, 2, 3, 4 };
int out[] = new int;
int p = 1;
for (int i = 0; i < a.length; ++i) {
p *= a[i];
}
for (int i = a.length - 1; i >= 0; --i) {
out[i] = p / a[i];
}
for (int i = 0; i < out.length; i++) {
System.out.println(out[i]);
}
}
}``````

So in the above code we first calculate product for all numbers in the given array. And finally we divide product by each array element and get the desired output.

### Second Approach

In the first approach we used division to find out the desired results but here we find out the desired results without division.

``````public class ArrayProductsNoDiv {
public static void main(String[] args) {
int[] a = new int[] { 1, 2, 3, 4 };
int out[] = new int;
int prod = 1;
for (int i = 0; i < a.length; ++i) {
out[i] = prod;
prod *= a[i];
}
prod = 1;
for (int i = a.length - 1; i >= 0; --i) {
out[i] *= prod;
prod *= a[i];
}
for (int i = 0; i < out.length; i++) {
System.out.println(out[i]);
}
}
}``````

### Third Approach

In this example we will see the recursive function to get the desired output:

``````public class ArrayProductsRecursive {
public static void main(String[] args) {
int[] a = new int[] { 1, 2, 3, 4 };
product(a, 1, 0);
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
static int product(int[] a, int prod, int n) {
return (n == a.length) ? 1 : a[n] * (prod = product(a, a[n] * (a[n] = prod), n + 1)) + 0 * (a[n] *= prod);
}
}``````

You will find more solutions here https://stackoverflow.com/questions/2680548/given-an-array-of-numbers-return-array-of-products-of-all-other-numbers-no-div.