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
相关产品推荐
相关产品推荐

