打印 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()。您的 az 可能未初始化。 (如果我每次写这篇文章都有一分钱……他们不再孩子这些东西了吗?) 【参考方案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 中的递归数的主要内容,如果未能解决你的问题,请参考以下文章

C语言如何用C语言递归实现:依次打印数字中的每一位?

C中的递归问题

C语言 - 递归实现字符串逆序打印

将参数字符串中的字符反向排列,不是逆序打印。用递归实现

递归c ++函数打印出斐波纳契树的元素

c语言中如何提取二进制数中的某一位?