📜  一个人只握手一次的握手次数

📅  最后修改于: 2021-05-04 14:11:08             🧑  作者: Mango

参加聚会的人数为N,请找到握手的总数,以使一个人只能握手一次。

例子:

Input : 5
Output : 10

Input : 9
Output : 36

我们可以看到问题的递归性质。

// 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

下面是上述递归公式的实现。

C++
// Recursive CPP program to count total 
// number of  handshakes when a person
// can shake hand with only one.
#include 
  
// 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;
}


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 chandan_jnu


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


C++
// Recursive CPP program to count total 
// number of  handshakes when a person
// can shake hand with only one.
#include 
  
// 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;
}


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 Arnab Kundu


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


输出:
36

我们可以通过扩展递归来提出一个直接公式

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 
  
// 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;
}

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 Arnab Kundu

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


输出:
36