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

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

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.