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

• Difficulty Level : Easy
• Last Updated : 26 Mar, 2021

Consider a coding competition on geeksforgeeks practice. Now their 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)]```

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].

## 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`

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`

This article is contributed by nikunj_agarwal. 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.