代码之家  ›  专栏  ›  技术社区  ›  pvt-Tron

C多重函数()printf-没有理由

  •  1
  • pvt-Tron  · 技术社区  · 2 周前

    我有一个简单的学习功能:

    #include<stdio.h>
    
    void func1(int i){
        
        if(i == 6) return; // Base Case
        printf("%d ", i);
        func1(i + 1);
        printf("\nEnd1");
    }
    
    int main()
    {
        func1(1); // *
        return 0;
    }
    

    1. func1()没有*输入。

    2. 我继续收到: 此输出(!!!?): 1 2 3 4 5 结束1 结束1 结束1 结束1 结束1

    3. 终端中没有错误

    $cd“/e/Prog_Lang/Module/”&&gcc recur_pnt1_5.c-o recur_pnt1_5.exe&&“/e/到Prog_Lang/Module/”recur_pnt1_5.exe<input.txt>output.txt e5-4bdc-b5e2-716617ce55ca XXXXXXX@XXXXXXXXXXXMINGW64/e/Prog_Lang/模块17(主)


    • 预期输出: 1 2 3 4 5 结束1

    我不知道我能解决什么问题。 有什么想法吗?

    2 回复  |  直到 2 周前
        1
  •  1
  •   greg spears    2 周前

    您没有得到预期的输出,因为代码使用的逻辑不支持该输出。请注意的逻辑中的微小变化 func1() --大括号放在条件的代码块周围 (i==6) 。此代码块现在包括 End1 语句,以便程序可以按预期给出输出。

    更新:根据您的要求 printf(End1) 现在放置语句 之后 递归调用。

    可运行代码是 here .

    #include<stdio.h>
    
    void func1(int i)
    {
        if(i < 6) 
        {
            printf("%d ", i);
            func1(i + 1);
        }
        else
        {
            printf("End1\n");
        }
    }    
    
    int main()
    {
        func1(1);
        return 0;
    }
    

    输出

        1 2 3 4 5 End1
    
        2
  •  1
  •   WataminC    2 周前

    我复制了整个代码并执行了它,结果是

    1 2 3 4 5 
    End1
    End1
    End1
    End1
    End1
    

    在函数fun1中,有一个语句 printf("\nEnd1"); i == 6 因此,每次在递归中调用fun1时, \nEnd1 将打印到终端。

    如果您只想在递归结束时打印它,您应该更改 fun1 这样地

    void func1(int i){
        
        if(i == 6) 
        {
            printf("\nEnd1");
            return ;
        } 
        printf("%d ", i);
        func1(i + 1);
    }