 Open in App
Not now

# Counting pairs when a person can form pair with at most one

• Difficulty Level : Medium
• Last Updated : 10 Dec, 2022

Consider a coding competition on geeksforgeeks practice. Now there are n distinct participants taking part in the competition. A single participant can make pair with at most one other participant. We need count the number of ways in which n participants participating in the coding competition.

Examples :

```Input : n = 2
Output : 2
2 shows that either both participant
can pair themselves in one way or both
of them can remain single.

Input : n = 3
Output : 4
One way : Three participants remain single
Three More Ways : [(1, 2)(3)], [(1), (2,3)]
and [(1,3)(2)]```

Method 1:

1) Every participant can either pair with another participant or can remain single.
2) Let us consider X-th participant, he can either remain single or he can pair up with someone from [1, x-1].

Below is the implementation of the above idea:

## C++

 `// Number of ways in which participant can take part.` `#include` `using` `namespace` `std;`   `int` `numberOfWays(``int` `x)` `{` `    ``// Base condition ` `    ``if` `(x==0 || x==1)     ` `        ``return` `1;`   `    ``// A participant can choose to consider` `    ``// (1) Remains single. Number of people ` `    ``//     reduce to (x-1)` `    ``// (2) Pairs with one of the (x-1) others.` `    ``//     For every pairing, number of people ` `    ``//     reduce to (x-2). ` `    ``else` `        ``return` `numberOfWays(x-1) + ` `               ``(x-1)*numberOfWays(x-2);` `}`   `// Driver code` `int` `main()` `{` `    ``int` `x = 3;` `    ``cout << numberOfWays(x) << endl;` `    ``return` `0;` `} `

## Java

 `// Number of ways in which` `// participant can take part.` `import` `java.io.*;`   `class` `GFG {`   `static` `int` `numberOfWays(``int` `x)` `{` `    ``// Base condition ` `    ``if` `(x==``0` `|| x==``1``)     ` `        ``return` `1``;`   `    ``// A participant can choose to consider` `    ``// (1) Remains single. Number of people ` `    ``//     reduce to (x-1)` `    ``// (2) Pairs with one of the (x-1) others.` `    ``//     For every pairing, number of people ` `    ``//     reduce to (x-2). ` `    ``else` `        ``return` `numberOfWays(x-``1``) + ` `            ``(x-``1``)*numberOfWays(x-``2``);` `}`   `// Driver code` `public` `static` `void` `main (String[] args) {` `int` `x = ``3``;` `System.out.println( numberOfWays(x));` `    `  `    ``}` `}`   `// This code is contributed by vt_m.`

## Python3

 `# Python program to find Number of ways ` `# in which participant can take part.`   `# Function to calculate number of ways.` `def` `numberOfWays (x):`   `    ``# Base condition ` `    ``if` `x ``=``=` `0` `or` `x ``=``=` `1``:` `        ``return` `1` `        `  `    ``# A participant can choose to consider` `    ``# (1) Remains single. Number of people` `    ``# reduce to (x-1)` `    ``# (2) Pairs with one of the (x-1) others.` `    ``# For every pairing, number of people` `    ``# reduce to (x-2).` `    ``else``:` `        ``return` `(numberOfWays(x``-``1``) ``+` `              ``(x``-``1``) ``*` `numberOfWays(x``-``2``))`   `# Driver code` `x ``=` `3` `print` `(numberOfWays(x))`   `# This code is contributed by "Sharad_Bhardwaj"`

## C#

 `// Number of ways in which` `// participant can take part.` `using` `System;`   `class` `GFG {`   `    ``static` `int` `numberOfWays(``int` `x)` `    ``{` `        `  `        ``// Base condition ` `        ``if` `(x == 0 || x == 1) ` `            ``return` `1;` `    `  `        ``// A participant can choose to` `        ``// consider (1) Remains single.` `        ``// Number of people reduce to` `        ``// (x-1) (2) Pairs with one of` `        ``// the (x-1) others. For every` `        ``// pairing, number of people ` `        ``// reduce to (x-2). ` `        ``else` `            ``return` `numberOfWays(x - 1) + ` `            ``(x - 1) * numberOfWays(x - 2);` `    ``}` `    `  `    ``// Driver code` `    ``public` `static` `void` `Main () ` `    ``{` `        ``int` `x = 3;` `        `  `        ``Console.WriteLine(numberOfWays(x));` `    ``}` `}`   `// This code is contributed by vt_m.`

## PHP

 ``

## Javascript

 ``

Output

```4
```

Time Complexity: O(2x)
Auxiliary Space: O(log(x)), due to recursive call stack

Since there are overlapping subproblems, we can optimize it using dynamic programming

## C++

 `// Number of ways in which participant can take part.` `#include` `using` `namespace` `std;`   `int` `numberOfWays(``int` `x)` `{` `    ``int` `dp[x+1];` `    ``dp = dp = 1;`   `    ``for` `(``int` `i=2; i<=x; i++)` `       ``dp[i] = dp[i-1] + (i-1)*dp[i-2];`   `    ``return` `dp[x];` `}`   `// Driver code` `int` `main()` `{` `    ``int` `x = 3;` `    ``cout << numberOfWays(x) << endl;` `    ``return` `0;` `} `

## Java

 `// Number of ways in which` `// participant can take part.` `import` `java.io.*;` `class` `GFG {`   `static` `int` `numberOfWays(``int` `x)` `{` `    ``int` `dp[] = ``new` `int``[x+``1``];` `    ``dp[``0``] = dp[``1``] = ``1``;`   `    ``for` `(``int` `i=``2``; i<=x; i++)` `    ``dp[i] = dp[i-``1``] + (i-``1``)*dp[i-``2``];`   `    ``return` `dp[x];` `}`   `// Driver code` `public` `static` `void` `main (String[] args) {` `int` `x = ``3``;` `System.out.println(numberOfWays(x));` `    `  `    ``}` `}` `// This code is contributed by vipinyadav15799`

## Python3

 `# Python program to find Number of ways ` `# in which participant can take part.`   `# Function to calculate number of ways.` `def` `numberOfWays (x):`   `    ``dp``=``[]` `    ``dp.append(``1``)` `    ``dp.append(``1``)` `    ``for` `i ``in` `range``(``2``,x``+``1``):` `        ``dp.append(dp[i``-``1``]``+``(i``-``1``)``*``dp[i``-``2``])` `    ``return``(dp[x])` `    `    `# Driver code` `x ``=` `3` `print` `(numberOfWays(x))`   `# This code is contributed by "Sharad_Bhardwaj"`

## C#

 `// Number of ways in which` `// participant can take part.` `using` `System;`   `class` `GFG {`   `    ``static` `int` `numberOfWays(``int` `x)` `    ``{` `        ``int` `[]dp = ``new` `int``[x+1];` `        ``dp = dp = 1;` `    `  `        ``for` `(``int` `i = 2; i <= x; i++)` `            ``dp[i] = dp[i - 1] +` `                 ``(i - 1) * dp[i - 2];` `    `  `        ``return` `dp[x];` `    ``}` `    `  `    ``// Driver code` `    ``public` `static` `void` `Main ()` `    ``{` `        ``int` `x = 3;` `        `  `        ``Console.WriteLine(numberOfWays(x));` `    ``}` `}`   `// This code is contributed by vt_m.  `

## PHP

 ``

## Javascript

 ``

Output

```4
```

Time Complexity : O( x )
Auxiliary Space: O( x )

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