如何在递归函数末尾仅打印一次内容

问题描述 投票:0回答:3

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

#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/to Prog_Lang/Module/"recur_pnt1_5.exe 输出.txt e5-4bdc-b5e2-716617ce55ca XXXXXXX@XXXXXXXXXXX MINGW64 /e/Prog_Lang/Module 17(主)


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

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

c function loops recursion output
3个回答
1
投票

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

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);
}

1
投票

您没有获得预期的输出,因为代码使用的逻辑不支持该输出。请注意

func1()
逻辑中的微小变化 - 大括号放置在条件
(i==6)
的代码块周围。此代码块现在包含
End1
语句,因此程序可以按预期提供输出。

更新:根据您的要求指定,

printf(End1)
语句现在放置在递归调用之后之后。

可运行的代码在

这里

#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
    

0
投票
嗯,我也认为这个和“End1”的打印是在递归调用之后,只给出一个输出:

#include<stdio.h> int cntg1 = 1; int fend1(){ if(cntg1 < 2){ printf("\nEnd1"); cntg1++; } return 0; } void func1(int i){ if(i == 6) return; // Base Case printf("%d ", i); func1(i + 1); fend1(); // <<< this is factory new } int main() { func1(1); // * return 0; }
以下链接打开新网站页面点击

这里↗🌐查看代码运行情况。

有类似的解决方案可以避免使用全局变量吗?

© www.soinside.com 2019 - 2024. All rights reserved.