编写一个递归算法,计算组合式

组合数学定义为:
Cm的n次方={1,n=m或n=0
={Cm-1的n次方+Cm-1的n-1次方,其它

  • 以下回答由chatgpt基于相关博客总结生成:

    问题解答:

    根据题意,我们需要编写一个计算组合数学的定义的递归算法。其中,若n等于m或者等于0,则等于1,否则等于Cm-1的n次方加上Cm-1的n-1次方。

    首先我们需要写出递归函数的基本框架:

    int combination(int n, int m){
    
    }
    

    接下来,我们需要考虑递归函数的终止条件。根据题目要求,当n等于m或者等于0时,组合数等于1。因此,我们可以写出如下终止条件:

    int combination(int n, int m){
        if(n == m || n == 0){
            return 1;
        }
    }
    

    接着,我们需要考虑递归函数的递归关系。根据题目要求,组合数等于Cm-1的n次方加上Cm-1的n-1次方。因此,我们可以写出如下递归关系式:

    int combination(int n, int m){
        if(n == m || n == 0){
            return 1;
        }else{
            return combination(n-1, m-1) + combination(n-1, m);
        }
    }
    

    最终的完整代码如下:

    #include <stdio.h>
    
    int combination(int n, int m);
    
    int main(void){
        int n, m;
        printf("请输入n和m的值:\n");
        printf("n = ");
        scanf("%d", &n);
        printf("m = ");
        scanf("%d", &m);
        printf("C(%d, %d) = %d\n", n, m, combination(n, m));
        return 0;
    }
    
    int combination(int n, int m){
        if(n == m || n == 0){
            return 1;
        }else{
            return combination(n-1, m-1) + combination(n-1, m);
        }
    }
    

    运行结果如下:

    请输入n和m的值:
    n = 5
    m = 3
    C(5, 3) = 10
    

请你把问题写清楚