可以将数的集合分成两部分,分别是要当前的数字与不要当前的数字。计算Cxn,要当前的数字那么可以在剩下来的数字中选择n - 1个数的方案数,不要当前的当前的数字那么在剩下来的数字中选择n个数字,那么递推式为:Cxn = Cx-1n-1 + Cx-1n(x >= n),使用一个二维数组或者列表来记录递推过程的值即可,两重循环由小到大的范围进行递推:
if __name__ == '__main__':
n = 15
f = [[0] * 15 for i in range(15)]
for i in range(n):
for j in range(i + 1):
if j == 0: f[i][j] = 1
else: f[i][j] = f[i - 1][j] + f[i - 1][j - 1]
# C14取2
print(f[14][2])