# Number of compositions of a natural number

Given a natural number n, find the number of ways in which n can be expressed as a sum of natural numbers when order is taken into consideration. Two sequences that differ in the order of their terms define different compositions of their sum.

Examples:

```Input :  4
Output : 8
Explanation
All 8 position composition are:
4, 1+3, 3+1, 2+2, 1+1+2, 1+2+1, 2+1+1
and 1+1+1+1

Input :  8
Output : 128
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

A Simple Solution is to generate all compositions and count them.

Using the concept of combinatorics, it can be proved that any natural number n will have 2^(n-1) distinct compositions when order is taken into consideration.

One way to see why the answer is 2^(n-1) directly is to write n as a sum of 1s:
n = 1 + 1 + 1 +…+ 1 (n times).

There are (n-1) plus signs between all 1s. For every plus sign we can choose to split ( by putting a bracket) at the point or not split. Therefore answer is 2^(n-1).

For example, n = 4
No Split
4 = 1 + 1 + 1 + 1 [We write as single 4]

Different ways to split once
4 = (1) + (1 + 1 + 1) [We write as 1 + 3]
4 = (1 + 1) + (1 + 1) [We write as 2 + 2]
4 = (1 + 1 + 1) + (1) [We write as 3 + 1]

Different ways to split twice
4 = (1) + (1 + 1) + (1) [We write as 1 + 2 + 1]
4 = (1 + 1) + (1) + (1) [We write as 2 + 1 + 1]
4 = (1) + (1) + (1 + 1) [We write as 1 + 1 + 2]

Different ways to split three times
4 = (1) + (1) + (1) + (1) [We write as 1 + 1 + 1 + 1]

Since there are (n-1) plus signs between the n 1s, there are 2^(n-1) ways of choosing where to split the sum, and hence 2^(n-1) possible sums .

## C++

 `// C++ program to find the total number of ` `// compositions of a natural number ` `#include ` `using` `namespace` `std; ` ` `  `#define ull unsigned long long ` ` `  `ull countCompositions(ull n) ` `{ ` `    ``// Return 2 raised to power (n-1) ` `    ``return` `(1L) << (n-1); ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``ull n = 4; ` `    ``cout << countCompositions(n) << ``"\n"``; ` `    ``return` `0; ` `} `

## Java

 `// Java program to find  ` `// the total number of  ` `// compositions of a ` `// natural number ` `import` `java.io.*; ` `import` `java.util.*; ` ` `  `class` `GFG ` `{ ` `public` `static` `int` `countCompositions(``int` `n) ` `{ ` `    ``// Return 2 raised  ` `    ``// to power (n-1) ` `    ``return` `1` `<< (n - ``1``); ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main(String args[]) ` `{ ` `    ``int` `n = ``4``; ` `    ``System.out.print(countCompositions(n)); ` `} ` `} ` ` `  `// This code is contributed by  ` `// Akanksha Rai(Abby_akku) `

## Python

 `# Python code to find the total number of ` `# compositions of a natural number ` `def` `countCompositions(n): ` ` `  `    ``# function to return the total number  ` `    ``# of composition of n ` `    ``return` `(``2``*``*``(n``-``1``)) ` ` `  `# Driver Code ` `print``(countCompositions(``4``)) `

## C#

 `// C# program to find the  ` `// total number of compositions ` `// of a natural number ` `using` `System; ` ` `  `class` `GFG ` `{ ` `public` `static` `int` `countCompositions(``int` `n) ` `{ ` `    ``// Return 2 raised  ` `    ``// to power (n-1) ` `    ``return` `1 << (n - 1); ` `} ` ` `  `// Driver Code ` `public` `static` `void` `Main() ` `{ ` `    ``int` `n = 4; ` `    ``Console.Write(countCompositions(n)); ` `} ` `} ` ` `  `// This code is contributed by mits `

## PHP

 ` `

Output:

```8
```

This article is contributed by Sruti Rai . If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.