当前位置:首页算法 > 正文

组合数的秘密:杨辉三角与递推公式-野牛程序员教少儿编程

作者:野牛程序员:2025-05-20 12:40:47算法阅读 2182
组合数的秘密:杨辉三角与递推公式-野牛程序员教少儿编程

? 什么是组合数?

组合数表示从 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 2
C(5, 2) = 10

? 课堂练习

编号题目
写出杨辉三角前 6 行
手算 C(6,3) 并验证
输出所有 C(10, r),r 从 0 到 10
思考:为什么 C(n, r) = C(n, n-r) 是对称的?


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
  • 组合数的秘密:杨辉三角与递推公式-野牛程序员教少儿编程
  • 相关推荐

    最新推荐

    热门点击