C语言——递归算法实现排列组合

一、组合数的实现

问题:从n个不同的元素中,任取m(m≤n)个元素为一组,求组合的个数?

分析:从n-1个元素到n个元素,每增加一个,这个元素可能被选中,也可能不被选中。若第n个元素被选中则是从n-1个元素中选择k-1个元素,若第n个元素没被选中,则是从n-1个元素中选择k个元素。即得以下公式: 

#include<stdio.h>
//分析:从n个人里选k个人的组合数
//=从(n-1)个人里选k个人的组合数+从(n-1)个人里选(k-1)个人的组合数。
int fun(int n, int k)
{
    if(k > n)
        return 0;
    else if(k == n||k == 0)
        return 1;
    else
        return fun(n-1,k) + fun(n-1, k-1);
}
int main()
{
    int n, k;
    printf("Input:");
    scanf("%d%d",&n,&k);
    printf("\nAll Plan: %d\n",fun(n,k));
}

猜你喜欢

转载自blog.csdn.net/qq_42290771/article/details/81746324