You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言递归求解X个1与Y个0组成二进制数的组合总数问题

问题解决方案

你的递归函数逻辑本身是正确的,该问题本质是求组合数公式 C(X+Y, X),你的代码逻辑刚好对应了组合数的递推规则:C(n,k) = C(n-1,k-1) + C(n-1,k),递归终止条件也符合要求,最终返回的总和就是总组合数。

你当前代码仅打印10个点不输出总数的原因是:没有接收并打印recursion函数的返回值,仅在递归终止分支里打印了.。


修改步骤

  • 可选:删除recursion函数终止条件里的printf(".");语句,如你不需要输出点调试可以直接移除
  • 修改main函数,调用recursion时直接输出其返回值即可

修改后的完整代码

#include <stdio.h>
#include <stdlib.h>

int recursion(int a, int z)
{
    if(a==0 && z==0)
    {
        return 1;
    }
    if(a!=0 && z==0)
        return recursion(a-1,z);
    if(a==0 && z!=0)
        return recursion(a,z-1);
    return recursion(a-1,z)+recursion(a,z-1);
}

int main()
{
    int a,z;
    scanf("%d %d", &a, &z);
    // 输出递归返回的总组合数
    printf("%d\n", recursion(a,z));
    return 0;
}

测试验证

输入2 3时,程序输出10,和示例要求一致。

内容的提问来源于stack exchange,提问作者ulthipt_g

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 08:36:08