我必须在使用递归的C函数中打印一次,它可以在不使用全局变量的情况下完成吗?

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

我必须在使用递归的 C 函数中打印一次。

问题是在func1的末尾打印End1(1次且不超过1次): 为此,我创建了 fend1(),并为其配备了全局变量

以下代码是我的实际解决方案,但我希望达到相同的目标, 不使用任何全局变量。

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

以下链接打开新网站页面点击这里↗🌐查看代码运行情况。


正如我所预料的,我希望得到相同的目标(递归后打印1次), 不使用任何全局变量。

我之前问过类似的问题(↗🌐这里可以找到另一个问题),根据上面的问题得到最高分,但我必须找到更好的解决方案。


c function loops recursion output
2个回答
0
投票

您可以修改

func1
以返回一个标志,指示End1消息是否已被打印。尝试某事。像这样:

#include <stdio.h>

int func1(int i) {
    // Base Case
    if (i == 6) {
        return 0;
    }

    printf("%d ", i);
    int printed_end1 = func1(i + 1);

    // Print "End1" only if it hasn't been printed yet
    if (printed_end1 == 0) {
        printf("\nEnd1");
        return 1;
    }

    return printed_end1;
}

int main() {
    func1(1);
    return 0;
}

0
投票

您有一个基本案例。就用它吧

void func1(int i){
    
    if(i == 6) 
    {
        printf("\nEnd1");
        return; // Base Case
    }
    printf("%d ", i);
    func1(i + 1);
//    fend1(); // <<< this is factory new
}

请注意,当参数大于 6 时,该函数将具有未指定的行为。

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