为什么我的递归函数即使到达返回值(0)也不停止?

时间:2018-11-16 11:12:55

标签: c dictionary

我做了一个递归函数,它浏览一个列表,并试图将列表的各个部分放入地图中。我有一个检查它们是否适合地图的功能。

但是,如果地图太小,则递归应该停止并返回(0),但不是。我将printf("DONE")放在了返回值的前面,终端打印了它,但函数仍在运行。这怎么可能? DONE is printed several time even if return (0) is below

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 :(得分:1)

if((fillit_algo(orilst->next, map)))
    return (1);

如果fillit_algo在调用后返回0,则可以打印多个“ DONE”语句。因此,请在您的代码中处理“返回0”的情况。

示例:

 if((fillit_algo(orilst->next, map)))
        return (1);
  else 
       return 0;

答案 1 :(得分:1)

好吧...

非常简单,非常感谢,我不介意这件事。 我刚刚输入了“ 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);}