Number of handshakes such that a person shakes hands only once

Last Updated : 28 Dec, 2022

There is N number of people at a party. Find the total number of handshakes such that a person can handshake only once.

Examples: 

Input : 5
Output : 10

Input : 9
Output : 36 

We can see a recursive nature in the problem. 

// n-th person has (n-1) choices and after
// n-th person chooses a person, problem
// recurs for n-1.
handshake(n) = (n-1) + handshake(n-1)

// Base case
handshake(0) = 0 

Below is the implementation of the above recursive formula. 

C++
// Recursive C++ program to count total number of handshakes
// when a person can shake hand with only one.
#include <bits/stdc++.h>
using namespace std;

// Function to find all possible handshakes
int handshake(int n)
{

    // When n becomes 0 that means all the persons have done
    // handshake with other
    if (n == 0)
        return 0;
    else
        return (n - 1) + handshake(n - 1);
}

// Driver code
int main()
{
    int n = 9;
    cout << " " << handshake(n);
    return 0;
}

// This code is contributed by Aditya Kumar (adityakumar129)
C
// Recursive C program to count total number of  handshakes
// when a person can shake hand with only one.
#include <stdio.h>

// function to find all possible handshakes
int handshake(int n)
{
    // when n becomes 0 that means all the persons have done
    // handshake with other
    if (n == 0)
        return 0;
    else
        return (n - 1) + handshake(n - 1);
}

int main()
{
    int n = 9;
    printf("%d", handshake(n));
    return 0;
}

// This code is contributed by Aditya Kumar (adityakumar129)
Java
// Recursive Java program to count total number of
// handshakes when a person can shake hand with only one.
import java.io.*;

class GFG {

    // function to find all possible handshakes
    static int handshake(int n)
    {
        // when n becomes 0 that means all the persons have
        // done handshake with other
        if (n == 0)
            return 0;
        else
            return (n - 1) + handshake(n - 1);
    }

    // Driver Code
    public static void main(String[] args)
    {
        int n = 9;
        System.out.print(handshake(n));
    }
}

// This code is contributed by Aditya Kumar (adityakumar129)
Python3
# Recursive Python program 
# to count total number of
# handshakes when a person
# can shake hand with only one.

# function to find all 
# possible handshakes
def handshake(n): 

    # when n becomes 0 that means 
    # all the persons have done
    # handshake with other
    if (n == 0):
        return 0
    else:
        return (n - 1) + handshake(n - 1) 

# Driver Code
n = 9
print(handshake(n))

# This code is contributed 
# by Shivi_Aggarwal
C#
// Recursive C# program to 
// count total number of 
// handshakes when a person
// can shake hand with only one.
using System;

class GFG 
{

// function to find all
// possible handshakes
static int handshake(int n) 
{
    // when n becomes 0 that 
    // means all the persons 
    // have done handshake
    // with other
    if (n == 0) 
        return 0;
    else
        return (n - 1) + handshake(n - 1); 
}

// Driver Code
public static void Main (String []args) 
{
    int n = 9;
    Console.WriteLine(handshake(n));
}
}

// This code is contributed 
// by Arnab Kundu
PHP
<?php
// Recursive PHP program to  
// count total number of
// handshakes when a person
// can shake hand with only one.

// function to find all 
// possible handshakes
function handshake($n) 
{
    // when n becomes 0 that means 
    // all the persons have done
    // handshake with other
    if ($n == 0) 
        return 0;
    else
        return ($n - 1) + handshake($n - 1); 
}

// Driver Code
$n = 9;
echo(handshake($n));

// This code is contributed 
// by Shivi_Aggarwal
?>
JavaScript
<script>
      // Recursive JavaScript program to
      // count total number of
      // handshakes when a person
      // can shake hand with only one.
      // function to find all
      // possible handshakes
      function handshake(n) {
        // when n becomes 0 that
        // means all the persons
        // have done handshake
        // with other
        if (n === 0) 
          return 0;
        else 
          return n - 1 + handshake(n - 1);
      }

      // Driver Code
      var n = 9;
      document.write(handshake(n));
</script>

Output: 
36

 

Time Complexity: O(n)
Auxiliary Space: O(1), As the function is tail recursive the extra stack space will not be used.

We can come up with a direct formula by expanding the recursion. 

handshake(n) = (n-1) + handshake(n-1)
             = (n-1) + (n-2) + handshake(n-2)
             = (n-1) + (n-2) + .... 1 + 0
             = n * (n - 1)/2  
C++
// Recursive CPP program to count total number of handshakes
// when a person can shake hand with only one.
#include <bits/stdc++.h>
using namespace std;

// function to find all possible handshakes
int handshake(int n) { return n * (n - 1) / 2; }

int main()
{
    int n = 9;
    cout << handshake(n) << endl;
    return 0;
}

// This code is contributed by Aditya Kumar (adityakumar129)
C
// Recursive CPP program to count total number of handshakes
// when a person can shake hand with only one.
#include <stdio.h>

// function to find all possible handshakes
int handshake(int n) { return n * (n - 1) / 2; }

int main()
{
    int n = 9;
    printf("%d", handshake(n));
    return 0;
}

// This code is contributed by Aditya Kumar (adityakumar129)
Java
// Recursive Java program to count total number of
// handshakes when a person can shake hand with only one.
class GFG {

    // function to find all possible handshakes
    static int handshake(int n) { return n * (n - 1) / 2; }

    // Driver code
    public static void main(String args[])
    {
        int n = 9;
        System.out.println(handshake(n));
    }
}

// This code is contributed by Aditya Kumar (adityakumar129)
Python3
# Recursive Python program 
# to count total number of
# handshakes when a person
# can shake hand with only one.

# function to find all 
# possible handshakes
def handshake(n): 
    
    return int(n * (n - 1) / 2)

# Driver Code
n = 9
print(handshake(n))
    
# This code is contributed 
# by Shivi_Aggarwal
C#
// Recursive C# program to 
// count total number of 
// handshakes when a person 
// can shake hand with only one. 
using System;

class GFG
{
    
// function to find all 
// possible handshakes 
static int handshake(int n) 
{ 
    return n * (n - 1) / 2; 
} 

// Driver code 
static public void Main ()
{
    int n = 9; 
    Console.WriteLine(handshake(n)); 
} 
} 

// This code is contributed by Sachin
PHP
<?php
// Recursive PHP program to 
// count total number of 
// handshakes when a person
// can shake hand with only one.

// function to find all 
// possible handshakes
function handshake($n) 
{
    return $n * ($n - 1) / 2;
}

// Driver Code
$n = 9;
echo(handshake($n));

// This code is contributed
// by Shivi_Aggarwal
?>
JavaScript
<script>

// Recursive Javascript program to
// count total number of
// handshakes when a person
// can shake hand with only one.

// Function to find all
// possible handshakes
function handshake(n)
{
    return n * parseInt((n - 1) / 2, 10);
}

// Driver code
let n = 9;

document.write(handshake(n));

// This code is contributed by rameshtravel07

</script>

Output: 
36

 

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

Comment