递归的应用-组合数求解
来源:互联网 发布:mymps seo伪静态 编辑:程序博客网 时间:2024/05/16 19:42
从N个数中选择k个,共有多少组合?简单说就是求解C(N,k)。
实际问题,有N个教授,要选择k个组成委员会,共有多少种组合方式?
递归法:
将这N个人按照编号从小到大排好, 1,2,3...,k,...N
现在考虑从前M个人中选择k个,那么有两种情况:
1. 第M个人选进去,那么就是从剩下的M-1个人中选择k-1个,再加上第M个组成;
2. 第M个人不选进去,那么就是直接从M-1个人中选择k个。
组合数就是这两种情况的加和。
就构成了
C(M,k) = C(M-1,k-1) + C(M-1,k)
计算的之后可以直接从C(N,k)开始,当然要注意初始化,和终止条件。
直接从组合公式也能得到这个公式。
现在看代码:
- #include <iostream>
- using namespace std;
- int Cal(int N , int k)
- {
- if(0 == k || 0 == N)
- {
- return 1;
- }
- if(N < k)
- {
- return 0;
- }
- if(N == k)
- {
- return 1;
- }
- return Cal(N-1,k) + Cal(N-1,k-1);
- }
- // test
- int main()
- {
- int N = 3;
- int k = 2;
- cout<<Cal(N,k)<<endl;
- }
问题变形:
如果N个数中有重复呢?例如:N个字符,选出k个字符组合起来,共有多少种组合?再者,共有多少种排列?(组成多少单词)
0 0
- 递归的应用-组合数求解
- 字符串组合递归求解
- 组合求解--递归法
- 组合数的中的递归
- 求解钱的张数最少组合
- 一种求解组合数的思路
- 组合数快速求解
- 组合数求解公式
- 递归求解二——寻找指定和的组合
- 求组合数的递归算法
- 数的组合问题(递归)
- 递归求组合数
- Lucas求解组合数模板
- hdu 2519 - 求解组合数
- 组合数求解的基本函数(待完善)
- poj1850~Code~(组合数的应用)
- 迷宫求解问题-递归(栈的应用)
- 组合数之递归算法
- ubuntu install NVIDIA driver(Common methods, include how to exit X service)
- 九度oj 1048
- devstack安装报错解决方法:Failure creating NET_ID for xxxxx (ml2+ovs网络模式)
- The high signification of the modified poplar plywood
- Unity3D开发随手笔记
- 递归的应用-组合数求解
- Housewife Wind - POJ 2763 树链刨分
- node Express 创建一个web应用
- 卡尔曼滤波
- iOS部分-UI基础控件 - 01天 入门 第01课 计算机的界面搭建
- 【重庆淘宝代运营】淘宝类目不容小看 文章大了去
- IO模型
- 剑指offer 算法(链表 树)
- hdu 5392 许多数的lcm的取模