打印 C 中的递归数
Posted
技术标签:
【中文标题】打印 C 中的递归数【英文标题】:Print number of recursions in C 【发布时间】: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()
返回的值?
ideone.com/f8rHpc
与你的问题无关,写这样的递归混乱是非常糟糕的做法,这个练习的重点是学习有害的做法而不是好的做法。
是递归赋值吗?因为这个任务可以使用combination来解决。答案是 C(x + y, x)
切勿在未检查返回值的情况下对用户输入使用 scanf()。您的 a
和 z
可能未初始化。 (如果我每次写这篇文章都有一分钱……他们不再教孩子这些东西了吗?)
【参考方案1】:
#include <stdio.h>
#include <stdlib.h>
int recursion(int a, int z)
int d;
if(a==0 && z==0)
d++;
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,d;
scanf("%d %d", &a, &z);
d=recursion(a,z);
printf("%d",d);
return 0;
【讨论】:
recursion()
中的d
未初始化,因此该值没有意义。它也不能在函数之外访问。
请将返回码检查添加到scanf()
。如果用户输入的不是两个整数,那么您正在处理未初始化的变量 (=> UB)。【参考方案2】:
您的程序已经返回了它的递归级别,打印它的简单方法可能是:
int main()
int a, z, level, read;
do
read = scanf("%d %d", &a, &z);
if (read != 2)
printf("Incorrect input, please try again");
while (read != 2);
level = recursion(a,z);
printf("\n%d\n", level); /* Newline characters added to improve readability */
return 0;
所以输出将是您在第 9 行打印的点和递归级别(在您的示例中为 10)。
..........
10
【讨论】:
请将返回码检查添加到scanf()
。如果用户输入的不是两个整数,那么您正在处理未初始化的变量 (=> UB)。以上是关于打印 C 中的递归数的主要内容,如果未能解决你的问题,请参考以下文章