首页 > 其他 > 详细

排列组合问题递归非递归实现方法

时间:2017-02-04 16:46:33      阅读:227      评论:0      收藏:0      [点我收藏+]

问题:

在n个球中,任意取出m个(不放回),共有多少种取法?

方法一:手动实现阶乘函数,使用排列组合数学公式计算:

public class Main {

    public static int factorial(int n){
        int product=1;
        if(n==0)
            return 1;
        else if(n<0){
            System.out.println("Input cannot be negative!");
            return -1;
        }
        for(; n>=1; n--){
            product*=n; 
        }
        return product;
    }
    public static int getBalls(int n, int m){
        //在n个球中,任意取出m个(不放回),共有多少种取法
        if(n<m)
            return 0;
        return factorial(n)/(factorial(m)*factorial(n-m));
    }
    public static void main(String[] args) {
        System.out.println(getBalls(3, 2));
    }
}

 

方法二:利用递归的思想

  思路:强行分成n-1的问题,想象有一个特殊球,一种是取到该球的取法,一种是不取该球的方法。

public class Main {

    public static int getBalls(int n, int m){
        //在n个球中,任意取出m个(不放回),共有多少种取法
        if(n<m)
            return 0;
        else if(m==n||m==0)
            return 1;
        return getBalls(n-1, m-1)+getBalls(n-1, m);
    }
    public static void main(String[] args) {
        System.out.println(getBalls(3, 2));
    }
}

 

排列组合问题递归非递归实现方法

原文:http://www.cnblogs.com/zszq/p/6365054.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!