Функция рекурсивно работает вечно, если введено значение выше 3 - PullRequest
0 голосов
/ 15 марта 2019

Как обязательное предисловие, я новичок в 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);
    }
}

Единственное, что у меня есть в моей основной функции - это инициализация width с некоторым нечетным int и вызов функции. Я хотел бы получить код на самом деле ... печать правильно, прежде чем немного очистить логику. Спасибо за предоставленную помощь.

1 Ответ

1 голос
/ 15 марта 2019

In

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

left && right - логическое значение, вероятно, вы хотели

if ((left == num/2) && (right == num/2)  && (flag == 0)){
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...