组合问题——从n种球种取出m个

本文介绍了一种使用递归方法解决组合问题的算法。该问题关注的是从n种无限数量的球中取出m个球的不同组合数量。通过递归公式f(n,m)=f(n,m−1)+f(n−1,m),结合边界条件f(n,1)=n和f(1,m)=1,实现了组合数的计算。

组合问题: 从n种球中取出m个,有多少种取法,球的数量不限。

  思路:采用递归方式计算,可以认为是从 n 种球中取出 m - 1 个球,然后随意加上某一种A类球组合,由于球中所有有关A类的球组合已经求出,因此剩下的组合种不会包含A类球,故剩下的组合数为从 n - 1 种球中取出 m 个球. 公式表示如下:
 

f(n,m)=f(n,m1)+f(n1,m)  m>0,n>0

其中:
f(n,1)=n
f(1,m)=1

根据公式递归求解即可.
public int combination(int n, int m) {
    if (n < 1 || m < 1)
        return 0;
    if (m == 1)
        return n;
    else if (n == 1)
        return 1;
    return combination(n, m - 1) + combination(n - 1, m);
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值