如果输入的值大于3,则函数将永远递归运行

时间:2019-03-14 22:06:07

标签: c function recursion

作为强制性序言,我是C的新手,很可能只是错过了一些非常明显的内容。感谢您为解决我这个愚蠢的问题付出的所有时间和精力。

我有一个递归函数,其目的是打印出由较小的x个字符组成的大“ x”,其中width是x的每边的长度。例如,宽度为“ 3”将具有以下输出:

Shape:

X X
 X
X X

Returning.

“正在返回”。在返回主菜单之前打印。

以下函数仅对1和3的宽度执行此操作,但对于5、7、9等则无法做到。

void Recurse(int left, int right, int flag, int num){

int i;

    if(((left && right) == num/2) && (flag == 0)){
        for(i=0;i<num;i++){
            if (i == (num/2) ){
                printf("X");
            }
            else
                printf(" ");
        }
        printf("\n");
        flag = 1;
        Recurse(left-1, right+1, flag, num);
    }
    else if(flag == 0){
            for(i=0;i<num;i++){
                if((i == left) || (i == right)){
                printf("X");
            }
            else
                printf(" ");
        }
        printf("\n");
        Recurse(left+1, right-1, flag, num);
    }

    else if(flag == 1){
        for(i=0;i<num;i++){
            if((i == left) || (i == right)){
                printf("X");
            }
            else
                printf(" ");
        }
        printf("\n");
        if (((left == 0) && (right == num-1)) && (flag == 1))
                printf("\nReturning.\n");
            return;
        Recurse(left-1, right+1, flag, num);
    }
}

我的主函数中仅有的一件事是使用一些奇数int初始化width并调用该函数。我想实际获取代码...在稍微清理逻辑之前正确打印。感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

 if(((left && right) == num/2) && (flag == 0)){

left && right是一个布尔值,可能您想要

if ((left == num/2) && (right == num/2)  && (flag == 0)){