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

• Difficulty Level : Medium
• Last Updated : 07 Aug, 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)]

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.#includeusing 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 codeint 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 codepublic 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 codex = 3print (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.



## 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.#includeusing namespace std; int numberOfWays(int x){    int dp[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 codeint 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 codepublic 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 codex = 3print (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[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 ()    {        int x = 3;                 Console.WriteLine(numberOfWays(x));    }} // This code is contributed by vt_m.



## Javascript



Output:

4

Time Complexity : O( x )

Space Complexity : 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.