📅  最后修改于: 2023-12-03 15:07:34.814000             🧑  作者: Mango
给定一个数字n,编写一个程序以输出n的所有组合数。
注意:组合数计算公式:C(n,r) = n!/(r!(n-r)!), 其中r是从n个元素中选择r个不同元素的组合数, n!表示n的阶乘,即n! = 1 * 2 * 3 ... n
整数n (1<=n<=20)
n的所有组合数,每行一个。
输入:
5
输出:
1
5
10
10
5
1
我们可以使用递归函数 combination()
来计算组合数。由于组合数是对称的,即C(n,r)=C(n,n-r),我们可以只需要计算前一半即可。具体实现见代码。
def combination(n, r):
# 特判
if r == 0 or r == n:
return 1
# 递归计算组合数
return combination(n-1, r-1) + combination(n-1, r)
n = int(input())
for r in range(n//2+1):
# 输出前半部分组合数
print(combination(n, r))
# 输出后半部分组合数(对称性)
for r in range(n//2):
print(combination(n, n-r-1))