n球中任取m个(不放回)

Posted foxobedient

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了n球中任取m个(不放回)相关的知识,希望对你有一定的参考价值。

 1 //在n个球中,任意取出m个(不放回),求多少中不同的取法
 2 //平地起风雷
 3 public class CatchBalls {
 4 
 5     public static int f(int n,int m)
 6     {
 7         //a,b,c  .......ab,ac,bc
 8         if(n<m) return 0;
 9         if(n==m) return 1;
10         if(m==0) return 1;
11         return f(n-1,m-1) + f(n-1,m);    //n个球中有一个特殊球(想象)x,取法分成:包不包含x
12     }
13     
14     public static void main(String[] args) {
15         int k =f(10,3);
16         System.out.println(k);
17     }
18 }

Notes:

①使用递归方法平地起风雷

  要从最简单的例子开始考虑,且我们只做第一层,后面的交由递归处理

相似处:想象n个球中有一个特殊球,于是分为两种情况:

  一、n个球中我必取此球f(n-1,m-1)

  二、n个球中我必不取此球f(n-1,m)

出口:n<m时不可能取到

    n=m时只有一种可能

    m=0时只有一种可能


 

以上是关于n球中任取m个(不放回)的主要内容,如果未能解决你的问题,请参考以下文章

简单枚举---从一数组中任取n个元素

编写一个递归算法,找出从自然数1,2,3,…,n中任取r个数的所有组合。例如n=5,r=3时所有组合为543,542,541,532,531,521,432,431,421,321。

python中的排列组合

温习全排列

c语言,如何从确定的二位数组中任取其中2元素,才能不重不漏得把所有情况取到?

Java实现全排列