组合数的秘密:杨辉三角与递推公式-野牛程序员教少儿编程
作者:野牛程序员:2025-05-20 12:40:47算法阅读 2319
组合数的秘密:杨辉三角与递推公式-野牛程序员教少儿编程
? 什么是组合数?
组合数表示从 n个物品中选出 r 个的方法数,不考虑顺序。
我们记作:
C(n,r)=(n \ r)
? 例子:从 A、B、C 中选 2 人值日,可能有:
AB、AC、BC,共 3 种方法
所以:
C(3,2)=3
?♂️ 组合数的“魔法公式”:递推公式
组合数满足这样的递推关系:
C(n,r)=C(n−1,r)+C(n−1,r−1)
? 理解:
要从 n 本书中选 r本,第 n本《哈利波特》可以选也可以不选:
不选:《哈利波特》被跳过 → 从前 n−1 本中选 r本 → C(n−1,r)
选了它 → 从前 n−1 本中选 r−1本 → C(n−1,r−1)
? 所以:
C(n,r)=C(n−1,r)+C(n−1,r−1)
? 杨辉三角:组合数变身“魔法塔”
递推公式可以生成神奇的三角形结构:
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1
? 规律:
每一行是对应的 C(n,r)(第 n 行的第 r 个)
每个数等于它左上角 + 右上角两个数之和
? C++代码讲解:构建组合数表
#include <iostream>
using namespace std;
const int MAX = 101; // 最大支持 C(100, r)
long long C[MAX][MAX]; // 组合数数组
// 构建组合数的二维表
void build_combinations() {
for (int n = 0; n < MAX; ++n) {
C[n][0] = 1; // 选0个:永远只有1种方法
for (int r = 1; r <= n; ++r) {
C[n][r] = C[n - 1][r] + C[n - 1][r - 1]; // 使用递推公式
}
}
}
int main() {
build_combinations(); // 初始化组合数表
int n, r;
cout << "请输入 n 和 r(如 5 2 表示 C(5,2)): ";
cin >> n >> r;
cout << "C(" << n << ", " << r << ") = " << C[n][r] << endl;
return 0;
}✅ 示例输出:
请输入 n 和 r(如 5 2 表示 C(5,2)): 5 2C(5, 2) = 10
? 课堂练习
| 编号 | 题目 |
|---|---|
| ① | 写出杨辉三角前 6 行 |
| ② | 手算 C(6,3) 并验证 |
| ③ | 输出所有 C(10, r),r 从 0 到 10 |
| ④ | 思考:为什么 C(n, r) = C(n, n-r) 是对称的? |
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

