【发布时间】:2022-01-02 20:11:08
【问题描述】:
所以我有一个这样的练习: 编写用户输入 2 个自然数 X 和 Y 的程序。输出必须打印递归计算的组合数,以使用 X 1 和 Y 0 生成二进制数。 例如,用户输入 2 和 3。2 和 3 的组合生成二进制数是:
- 00011
- 00101
- 00110
- 01001
- 01010
- 01100
- 10001
- 10010
- 10100
10。 11000
程序必须打印“10”。
所以我已经编写了递归代码,但我想不出一种打印数字“10”的方法。 这是我的代码
#include <stdio.h>
#include <stdlib.h>
int recursion(int a, int z)
{
if(a==0 && z==0)
{
printf(".");
return 1;
}
if(a!=0 && z==0)
return recursion(a-1,z);
if(a==0 && z!=0)
return recursion(a,z-1);
if(a!=0 && z!=0)
return recursion(a-1,z)+recursion(a,z-1);
}
int main()
{
int a,z;
scanf("%d %d", &a, &z);
recursion(a,z);
return 0;
}
此代码仅打印 10 个“。”而不是我需要的点数。有什么想法吗?
【问题讨论】:
-
你的意思是你不知道如何打印
recursion()返回的值? -
与你的问题无关,写这样的递归混乱是非常糟糕的做法,这个练习的重点是学习有害的做法而不是好的做法。
-
是递归赋值吗?因为这个任务可以使用combination来解决。答案是 C(x + y, x)
-
切勿在未检查返回值的情况下对用户输入使用 scanf()。您的
a和z可能未初始化。 (如果我每次写这篇文章都有一分钱……他们不再教孩子这些东西了吗?)