参加聚会的人数为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