c++递归 n个人里选k个人的排列组合

 

这是组合数递推公式:

C(n,k)=C(n−1,k−1)+C(n−1,k)C(n, k) = C(n-1, k-1) + C(n-1, k)

这个公式的来源可以从组合意义上理解,也可以从杨辉三角归纳法来推导。


🔍 组合意义解释(最常用的推导)

我们要从 nn 个人里选 kk 个人,有两种情况:

假设第 nn 个人叫 Alice,其他 n−1n-1 个人叫 Others。

  • 情况 1:选了 Alice
    那么剩下还需要从 Others 中选 k−1k-1 个,方案数是 C(n−1,k−1)

  • 情况 2:没选 Alice
    那么需要从 Others 中选 kk 个,方案数是 C(n−1,k)

总方案数就是两种情况之和:

C(n,k)=C(n−1,k−1)+C(n−1,k)


📐 举个例子:C(5,2)C(5, 2)

从 5 个人中选 2 人:

  • 包含第 5 人的组合:从前 4 个中选 1 人 → C(4,1)=4C(4, 1) = 4

  • 不包含第 5 人的组合:从前 4 个中选 2 人 → C(4,2)=6C(4, 2) = 6

所以:

C(5,2)=4+6=10C(5, 2) = 4 + 6 = 10


🔁 对应到杨辉三角

这个公式就是杨辉三角(Pascal's Triangle)的构造规则:
每个位置的值是左上角加右上角:

1111211331\begin{align*} & & & & 1 \\ & & & 1 & & 1 \\ & & 1 & & 2 & & 1 \\ & 1 & & 3 & & 3 & & 1 \\ \end{align*}

每个数字都是它上面两个数字之和:

C(n,k)=C(n−1,k−1)+C(n−1,k)C(n, k) = C(n-1, k-1) + C(n-1, k)


如果你喜欢代数推导我也可以补充。是否要我从二项式系数公式角度推一遍?

 

posted @ 2025-06-13 21:08  ChuckLu  阅读(34)  评论(0)    收藏  举报