我做了一个递归函数,它浏览一个列表,并试图将列表的各个部分放入地图中。我有一个检查它们是否适合地图的功能。
但是,如果地图太小,则递归应该停止并返回(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);
}
答案 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);}