Почему моя рекурсивная функция не останавливается, даже если она достигает return (0)? - PullRequest
0 голосов
/ 16 ноября 2018

Я сделал рекурсивную функцию, которая просматривает список и пытается поместить части списка в карту. У меня есть функция, которая проверяет, соответствуют ли они на карте.

Однако, если карта слишком мала, рекурсия должна остановиться и вернуть (0), но это не так. Я ставлю printf("DONE") непосредственно перед возвратом, и терминал печатает его, но функция все еще работает. Как это возможно? ВЫПОЛНЕНО печатается несколько раз, даже если return (0) ниже

int fillit_algo (t_fill *orilst, t_map *map) {

    int     i;
    int     j;

    i = 0;
    j = 0;

    if (orilst == NULL)
        return (1);

    while (map->map[i] != 0)
    {
        while (map->map[i][j])
        {
            if (fill_map(map, orilst, i, j))
            {
                if((fillit_algo(orilst->next, map)))
                    return (1);
            }
            j++;
        }
        j = 0;
        i++;
    }
    printf ("DONE\n");

    return (0);
}

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Ну да ладно ...

Это было так просто, большое спасибо, я не возражал против этого. Я только что добавил «else return (0)», и это исправлено!

int     fillit_algo(t_fill *orilst, t_map *map){
int     i;
int     j;

i = 0;
j = 0;
if (orilst == NULL)
    return (1);
while (map->map[i] != 0)
{
    while (map->map[i][j])
    {
        if (fill_map(map, orilst, i, j))
        {
            if((fillit_algo(orilst->next, map)))
                return (1);
            else
                return (0);
        }
        j++;
    }
    j = 0;
    i++;
}
printf ("DONE");
return (0);}
0 голосов
/ 16 ноября 2018
if((fillit_algo(orilst->next, map)))
    return (1);

Если fillit_algo вернет 0 после вызова, то можно напечатать несколько операторов "DONE". Так что обработайте регистр '0' в вашем коде.

Пример:

 if((fillit_algo(orilst->next, map)))
        return (1);
  else 
       return 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...